2012-05-31 117 views
0

我正在使用jnlp文件的項目。在那裏也有這樣的規定的資源:在cli中包含jar文件庫

[代碼]

<resources> 
    <jar href="noterik-apu.jar" main="true" download="eager"/> 
    <jar href="springfield-tools.jar" download="eager"/> 
    <jar href="commons-httpclient-3.1.jar" /> 
    <jar href="commons-cli-1.2.jar" /> 
    <jar href="org.apache.commons.codec.jar" /> 
    <jar href="org.apache.commons.httpclient.jar" /> 
    <jar href="org.apache.commons.logging.jar" /> 
    <jar href="swing-worker-1.1.jar" /> 
    <jar href="log4j-1.2.16.jar" /> 
    <jar href="dom4j-1.6.1.jar" /> 
    <jar href="jaxen-1.1.1.jar" /> 
    <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/> 
</resources> 

[/代碼]

Ant構建文件並不包括在構建的.jar的JAR文件。我怎麼能在cli中添加這些jar,以便它不會給我「線程中的異常」main「java.lang.NoClassDefFoundError:」?我已經嘗試「-cp file1.jar:file2.jar:etc.jar」但我在互聯網上閱讀,你不能使用-cp與-jar ..我怎麼能使它工作?

在此先感謝!

+0

* 「使用JNLP文件」 *在哪裏?怎麼樣? ..什麼? JNLP用於啓動桌面應用程序。來自網絡上的鏈接。它與命令行應用程序沒有緊密的聯繫。 –

+0

將jar放入項目的lib文件夾中。 –

+0

我已經在他們的lib目錄。當我從eclipse導出項目時,我可以用java-jar來運行它...但是我正在和jenkins一起工作,並且它使用ant構建文件來構建項目。 build.xml不會在最終的jar中添加jar。 – tk66

回答

1

您不應該將jar文件嵌入到另一個jar文件中。這隻有在使用特殊的類加載器時纔有效。啓動您的應用程序時使用-cp選項:

java -cp lib\*:.\myApp.jar com.foo.bar.MyApp 

,或者按照上this page的指令包括jar文件到myApp.jar的明顯的相對路徑,並與java -jar myApp.jar啓動您的應用程序。

+0

我不想嵌入構建jar中的jar文件。但我有我的application.jar,我想從命令行運行它,並將其作爲參數的jar庫,而不是依賴於jnlp指定它們。但從我明白我不能運行「java -cp lib1.jar:lib2.jar -jar application.jar – tk66

+0

所以,請閱讀我的答案。它解釋了你應該怎麼做。 –

+0

java -cp springfield-tools.jar:公共-CLI-1.2.jar:公地httpclient的-3.1.jar:dom4j的-1.6.1.jar:Jaxen的-1.1.1.jar:log4j的-1.2.16.jar:的mail.jar:mailapi.jar和:組織。 apache.commons.codec.jar:org.apache.commons.httpclient.jar:org.apache.commons.logging.jar:smtp.jar:springfield-tools.jar:swing-worker-1.1.jar noterik-apu.jar – tk66

0

如果你是在Linux上編譯時使用

$ javac -cp myjar.jar Hello.java 

,當運行使用,需要包括當前目錄點

$ java -cp myjar.jar:. Hello