如何將一個文件夾(例如包含arts的資源文件夾)添加到netbeans項目的類路徑中?我設法通過編輯項目的NB生成jar文件(即MANIFEST.MF文件+手動複製資源)手動執行此操作,但是應該有辦法告訴netbeans以便介意資源,不是嗎?如何向類路徑添加資源
的文件夾結構如下所示:
/project/art/
/project/dist/lib/
/project/dist/art/
/project/dist/project.jar
/project/lib/
/project/src/
我不想藝術打包放進瓶子裏,因爲我想在本領域是容易更換。如果我將藝術文件夾添加到src文件夾,那麼NB編譯得很好,但藝術資源最終會放在jar中。
將art文件夾添加到NetBeans項目庫(屬性 - >庫 - >添加JAR /文件夾)似乎不起作用,因爲然後我結束了錯誤'... \ project \ art是一個目錄或不能被讀取。不要複製這些庫。「這反過來又阻止了真正的庫文件夾被複制。
任何想法?
問候 克里斯
取得2意見的基礎上,從gpeche評論: 一),而指定比在項目屬性的「編譯」選項卡中的「運行」選項卡中的其他資源文件夾 - >圖書館在Netbeans中似乎沒有太大的區別(我目前使用的是6.9.1)。輸出(因此錯誤)保持不變,即沒有被複制在所有:
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
另一個有趣的方面是,在庫面板沒有任何的幫助菜單中明確提到有關文件夾,庫。有可能,Netbeans中的按鈕是錯誤地命名的,那隻允許真正的jar嗎?
b)將資源文件夾添加到庫列表確實會產生影響,但要將其他條目添加到MANIFEST.MF。雖然 - 這是一個小問題 - 類路徑條目似乎總是希望資源文件夾是庫文件夾的子文件夾(例如「lib/arts」),主要問題是似乎缺少一個斜槓。 如上所述,MANIFEST.MF中的NB生成的條目看起來像這個「lib/arts」(這對我不起作用),而(手動設置)「lib/arts /」呢?
我用資源從該文件夾的方法是這樣的:
URL resource = getClass().getResource("/gui/refresh.png");
ImageIcon tmp = new ImageIcon(resource);
編輯:
基於Tushars評論和this posting我發現下面的解決方案是功能性之間的可接受的折衷和舒適。
我從自動生成的「build-impl.xml」文件中覆蓋ANT目標,該文件在Netbeans項目的基本「build.xml」文件的MANIFEST.MF文件中創建類路徑。都到了「的build.xml」文件中的代碼如下所示:
<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>
代價是,在Netbeans的發展我還是要資源文件夾(如「藝術」)添加到庫列表,以使項目在Netbeans中運行。這將在MANIFEST中引起額外的輸入。MF文件(「LIB /藝術」),與該庫將不會自動複製到「DIST」文件夾中的作用,與消息
...\art is a directory or can't be read. Not copying the libraries.
Not copying the libraries.
這behavor一起是 - 據我所知 - 意(迫使一切被捆綁在一個罐子裏),即使有關於它正在進行的討論。要製作一個真正的分發包,我必須從NB中的庫列表中取出資源文件夾並重建。
關於更簡化的設置沒有任何折衷的想法當然仍然受歡迎。 :)
1)增加一些對NB項目MANIFEST.MF文件(也就是在這種情況下,類路徑)似乎覆蓋任何東西,否則去那裏(例如:其他庫添加到項目中)。任何想法如何獲得原始路徑?例如,庫本身將被複制。 3)對我來說,它不工作沒有主導斜線 - 我必須添加斜線,然後它的作品。 – ChristianS 2010-09-16 06:39:51
我建議首先從NetBeans生成生成manifest.mf,然後使用這些默認類路徑值以及添加的其他目錄路徑。 – 2010-09-17 02:37:34
請同時添加指南如何排除文件夾資源,所以它不會被包括在.jar – GusDeCooL 2013-07-09 19:23:13