Làm cách nào để bạn thêm thư mục (ví dụ: thư mục tài nguyên chứa nghệ thuật) vào đường dẫn lớp của dự án netbeans? Tôi quản lý để làm điều đó bằng tay thông qua chỉnh sửa NB jar tạo ra tập tin của dự án (đó là tập tin MANIFEST.MF của nó + sao chép các nguồn tài nguyên bằng tay), nhưng cần phải có một cách để nói netbeans cũng như tâm tài nguyên, không?Cách thêm tài nguyên vào đường dẫn lớp
cấu Thư mục trông như thế này:
/project/art/
/project/dist/lib/
/project/dist/art/
/project/dist/project.jar
/project/lib/
/project/src/
Tôi không muốn gói nghệ thuật vào jar vì tôi muốn nghệ thuật được dễ dàng trao đổi. Nếu tôi thêm thư mục nghệ thuật vào thư mục src thì NB biên dịch tốt, nhưng tài nguyên nghệ thuật sẽ kết thúc trong bình.
Thêm thư mục nghệ thuật vào thư viện dự án netbeans (Thuộc tính -> Thư viện -> Thêm JAR/Thư mục) có vẻ không hoạt động, vì sau đó tôi kết thúc với lỗi '... \ project \ art là một thư mục hoặc không thể đọc được. Không sao chép các thư viện. ' điều này sẽ ngăn không cho thư viện thực sự bị sao chép.
Bất kỳ ý tưởng nào?
Trân trọng Chris
2 Quan sát thực hiện, dựa trên ý kiến từ gpeche: a) xác định Thay vì thư mục nguồn lực bổ sung trong "Run" tab hơn trong "biên dịch" tab trong những tài sản dự án - > Thư viện dường như không tạo ra nhiều khác biệt trong Netbeans (Tôi hiện đang sử dụng 6.9.1). Sản lượng (và do đó lỗi) giữ nguyên, đó là không có gì được sao chép ở tất cả:
Created dir: C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\dist
C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\art is a directory or can't be read. Not copying the libraries.
Not copying the libraries.
Building jar: C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\dist\VocabularyTrainer.jar
Một khía cạnh thú vị là trong menu trợ giúp của Libraries bảng không có gì được đề cập một cách rõ ràng liên quan đến thư mục như thư viện. Nó có thể được, rằng các nút trong Netbeans là sai tên, đó là chỉ thực sự của jar được cho phép?
b) Thêm thư mục tài nguyên vào danh sách Thư viện không có tác động, để thêm mục nhập khác vào MANIFEST.MF. Mặc dù - và đó là vấn đề nhỏ hơn - mục nhập classpath dường như luôn mong thư mục tài nguyên trở thành thư mục con của thư mục thư viện (ví dụ: "lib/arts"), vấn đề chính là dường như dấu gạch chéo bị thiếu. Như đã đề cập, mục nhập NB được tạo trong MANIFEST.MF sẽ trông giống như "lib/arts" (không hoạt động đối với tôi), trong khi (đặt thủ công) "lib/arts /"?
Con đường tôi sử dụng các nguồn lực từ các thư mục là một cái gì đó như thế này:
URL resource = getClass().getResource("/gui/refresh.png");
ImageIcon tmp = new ImageIcon(resource);
Edit:
Dựa trên Tushars bình luận và this posting Tôi tìm thấy giải pháp sau đây để có một sự cân bằng có thể chấp nhận giữa chức năng và thoải mái.
Tôi ghi đè mục tiêu ANT từ tệp 'build-impl.xml' được tạo tự động để tạo Lớp-Đường dẫn trong tệp MANIFEST.MF trong tệp 'build.xml' cơ bản của dự án Netbeans. Các mã mà đi đến tập tin 'build.xml' trông như thế này:
<property name="art.classpath" value="art/" />
<target name="-post-jar">
<mkdir dir="${dist.dir}/art"/>
<copy todir="${dist.dir}/art">
<fileset dir="${basedir}/art">
<!-- <exclude name="**/!source/**"/> if you want to exclude something... -->
</fileset>
</copy>
</target>
<target name="-init-macrodef-copylibs">
<macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
<element name="customize" optional="true"/>
<sequential>
<property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
<pathconvert property="run.classpath.without.build.classes.dir">
<path path="${run.classpath}"/>
<map from="${build.classes.dir.resolved}" to=""/>
</pathconvert>
<pathconvert pathsep=" " property="jar.classpath">
<path path="${run.classpath.without.build.classes.dir}"/>
<chainedmapper>
<flattenmapper/>
<globmapper from="*" to="lib/*"/>
</chainedmapper>
</pathconvert>
<taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
<copylibs compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
<fileset dir="${build.classes.dir}"/>
<manifest>
<attribute name="Class-Path" value="${jar.classpath} ${art.classpath}"/>
<customize/>
</manifest>
</copylibs>
</sequential>
</macrodef>
</target>
Sự cân bằng được rằng để phát triển trong Netbeans tôi vẫn phải thêm thư mục tài nguyên (ví dụ như 'nghệ thuật') để các thư viện liệt kê để làm cho dự án chạy trong Netbeans. Điều này sẽ gây ra một mục nhập bổ sung trong MANIFEST.tập MF ('lib/nghệ thuật') cùng với các hiệu ứng mà các thư viện sẽ không được tự động sao chép vào thư mục 'quận', với thông điệp
...\art is a directory or can't be read. Not copying the libraries.
Not copying the libraries.
behavor Đây là - afaik - dự định (để buộc tất cả mọi thứ để được đóng gói trong một cái lọ), mặc dù có những cuộc thảo luận về nó đang diễn ra. Để thực hiện một gói phân phối thực sự, tôi sẽ phải lấy đi (các) thư mục tài nguyên từ danh sách thư viện trong NB và xây dựng lại.
Ý tưởng về thiết lập được sắp xếp hợp lý hơn mà không có bất kỳ sự cân bằng nào cũng được hoan nghênh. :)
1) thêm nội dung nào đó vào tệp manifest.mf của dự án NB (đó là Class-Path trong trường hợp này) có vẻ ghi đè bất kỳ thứ gì khác sẽ đến đó (ví dụ: các thư viện khác được thêm vào dự án). Bất kỳ ý tưởng làm thế nào để có được con đường ban đầu trở lại là tốt? Ví dụ, các thư viện chính nó sẽ được sao chép. 3) đối với tôi nó không hoạt động mà không có dấu gạch chéo hàng đầu - tôi phải thêm dấu gạch chéo đó, sau đó nó hoạt động. – ChristianS
Tôi sẽ đề nghị đầu tiên tạo manifest.mf từ xây dựng NetBeans và sau đó sử dụng các giá trị đường dẫn lớp mặc định cộng với đường dẫn thư mục bổ sung của bạn được thêm vào. –
Vui lòng thêm hướng dẫn cách loại trừ tài nguyên thư mục, vì vậy nó sẽ không được bao gồm trong .jar – GusDeCooL