2011-07-05 40 views
0

我目前正試圖製作一個包含我所有庫的Jar。我做了什麼,我創建了這樣的文件夾:Java - Jar無法找到包含的庫和主類

eancopy (which contain all my classes) 
lib (containing all my libraries : mongo, jedis...) 
META-INF/MANIFEST.MF 

我主要的類名爲process(包eancopy內)

我的清單是這樣的:

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.2 
Class-Path: lib\commons-pool-1.5.6.jar lib\jedis-2.0.0.jar lib\mongo-2.6.3.jar 
Created-By: 1.6.0_24-b07 (Sun Microsystems Inc.) 
Main-Class: eancopy.process 

我有使用以下命令生成JAR:

jar cvmf META-INF/MANIFEST.MF EANcopy.jar eancopy/*.class lib/*.jar 

我的問題:執行

Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/DBObject 
Caused by: java.lang.ClassNotFoundException: com.mongodb.DBObject 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
Could not find the main class: eancopy.process. Program will exit. 

任何想法:鼎JAR由java -jar EANcopy.jar,當它在我已生成JAR的地方,但在另一個地方執行我的消息,它的工作原理?由於

+2

你知道如何接受答案嗎? – abalogh

回答

0

此異常說明你的問題的原因:

異常在線程「主要」 java.lang.NoClassDefFoundError:COM /的MongoDB/DBOBJECT

您沒有在指定這些庫lib\commons-pool-1.5.6.jar lib\jedis-2.0.0.jar lib\mongo-2.6.3.jarCLASSPATH環境變量,因此爲什麼它在其他地方運行時失敗。

+0

它在MANIFEST - > Class-Path中指定,爲了兼容性我更喜歡不使用CLASSPATH環境變量 – kozher

+0

是的,但所有這些jar包含在'EANCopy.jar'中? –

0

類路徑屬性只能找到與您的jar共同定位的庫,而不是包含在jar文件中的庫。 根據這個thread,你必須使用一個特殊的類加載器或使用一種方法來爆炸你的jar中包含的庫。

相關問題