2013-10-10 264 views
0

我正在使用ANT創建我的應用程序的JAR文件。在我閱讀的時候,我應該把我需要的外部Jars作爲參數從命令行中提取出來,但是我想創建一個Manifest文件。從命令行運行Jar:ClassNotFoundException

這是我的build.xml文件(僅在部分中,我構建JAR)

現在,這是清單文件

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.4 
Created-By: 1.6.0_45-b06 (Sun Microsystems Inc.) 
Main-Class: com.sap.coas.deployer.StoreInstanceOnMove 
Class-Path: lib/ConfigurationMetamodel-1.jar lib/Consumer_api-1.jar li 
b/FunctionalSystemMetaModel-1.jar lib/WS_api-1.jar lib/activemq-core- 
5.7.0.jar lib/activemq-protobuf-1.1.jar ..... other jar 

的提取物。如果我打開JAR生成,我可以看到META-INF文件夾內的清單,並且lib文件夾包含所有庫。 所以JAR的結構是這樣的一個:

/META-INF/manifest.mf 
/lib/ConfigurationMetamodel-1.jar 
/lib/otherJar.jar ........ 

但是當我嘗試運行

java -jar myJar.jar 

我得到了ClassNotFoundException的,我敢肯定,包含拋出類的jar異常是在lib文件夾中。

謝謝!

+0

嘗試包括通過使用-classpath或-cp開關的命令行上的所有JAR文件:Java的罐子myJar.jar -cp LIB/a.jar文件; LIB/b.jar等等... – Manish

+0

但是,您確定lib文件夾與可運行jar文件夾位於相同的文件夾中嗎? –

+0

@管理它將花費太多時間,因爲我必須分發這個JAR。實際上,我發現(我認爲)解決方案:manifestclasspath的屬性jarfile是錯誤的,現在$ {target.dist} /configuration-deployer.jar正在工作,有什麼想法? – Alessio

回答

0

您不能在清單文件中使用Class-Path頭來指向JAR文件中的JAR。請檢查以下鏈接。您應該將lib文件夾與那些JAR放在myJar.jar的相同文件夾中。

Adding Classes to the JAR File's Classpath

注:類路徑頭球點到類或JAR文件在本地網絡上,在JAR文件中沒有的JAR文件或班級通過Internet協議進行訪問。要將JAR文件中的JAR文件中的類加載到類路徑中,您必須編寫自定義代碼來加載這些類。例如,如果MyJar.jar包含另一個名爲MyUtils.jar的JAR文件,則不能在MyJar.jar的清單中使用Class-Path標頭將MyUtils.jar中的類加載到類路徑中。