2009-11-09 78 views
2

我的Java應用程序使用的庫需要在類路徑中查找文件(log4j.xml)。我使用netbeans來管理我的項目,但我找不到包含lib /文件夾的方法。如何在Netbeans的清單類路徑中包含lib文件夾

Netbeans會自動在應用程序jar中創建一個MANIFEST.MF文件,並創建一個名爲lib /的文件夾,其中包含所有依賴關係。此清單指定一個覆蓋命令行上提供的任何-cp參數的Class-Path屬性。我可以在netbeans的庫面板中選擇一個任意文件夾,但它會在清單的類路徑中創建一個子文件夾。我想要所有的依賴和lib /文件夾內的log4j.xml文件。

希望有可能在IDE中這樣做。我包含了一個自動生成的build-impl.xml文件的片段。

<target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available" name="-do-jar-with-libraries"> 
    <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}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> 
     <fileset dir="${build.classes.dir}"/> 
     <manifest> 
      <attribute name="Main-Class" value="${main.class}"/> 
      <attribute name="Class-Path" value="${jar.classpath}"/> 
     </manifest> 
    </copylibs> 
    <echo>To run this application from the command line without Ant, try:</echo> 
    <property location="${dist.jar}" name="dist.jar.resolved"/> 
    <echo>java -jar "${dist.jar.resolved}"</echo> 
</target> 

謝謝。

回答

1

我發現了一種方法來實現這個修改build-impl.xml。

我改變:

<attribute name="Class-Path" value="${jar.classpath}"/> 

到:

<attribute name="Class-Path" value="${jar.classpath} /lib"/> 

的問題是,NetBeans將覆蓋它,因爲會自動生成該文件。

+0

也許你可以在Netbeans之外建立一個自定義的ANT腳本,這樣它就不會被覆蓋。 – ssakl 2009-11-16 20:54:37

+0

我可能沒有別的作品。我對Ant沒有什麼瞭解,也沒有太多時間來學習Ant。我認爲我的問題不會是一件容易的事。 :( – FabienB 2009-11-18 23:06:04

0

看來你的問題是將你的log4j.xml文件存儲在/ lib中的「globmapper」 - 你希望它在「/」或罐子裏。

+0

如果我刪除globmapper指令,那麼Class-Path指向錯誤的文件夾(不是lib /)。同樣的事情,如果我只是修改它。 jar文件已正確綁定。我想將lib /文件夾添加到Class-Path中。 – FabienB 2009-11-13 19:13:06

+0

然後,只需將''構建器更改爲直接指向lib /,而不是'$ {run {classpath.without.build.classes.dir}'使用'$ {run.classpath.without.build.classes.dir }/lib' – Guss 2009-11-14 22:16:26

+1

更改會在類路徑中添加一個lib/lib,這是不正確的。我希望lib /中的所有內容(jar和xml)。 此外,對於build-impl.xml的任何修改都會在Netbeans重新創建時丟失。(這看起來是隨機的) – FabienB 2009-11-18 23:01:21

3

不應編輯build-impl.xml文件,而應將此條目添加到build.xml文件。當您在項目中修改與該項目相關的任何內容時,它將生成一個新的build-impl.xml文件。

這裏是什麼,我把我的build.xml文件的例子:

<target depends="init" name="-do-clean"> 
    <delete dir="${build.dir}"/> 
    <delete file="${dist.jar}"/> 
    <delete dir="${dist.dir}/lib"/> 
    <delete dir="${dist.dir}/resources"/> 
</target> 

自從我把這個build.xml文件中,它將覆蓋的的「-DO清潔」節build-impl.xml文件包含:

<target depends="init" name="-do-clean"> 
    <delete dir="${build.dir}"/> 
    <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/> 
</target> 

此外,由於它在build.xml中,所以它不會被Netbeans修改。

1

您可以在項目的根文件夾(它是jar文件中的清單模板)中簡單地關閉項目選項Build/Packaging/Copy Dependent Library和manualy edit manifest.mf。

相關問題