Java - Jar无法找到包含的库和主类

时间:2011-07-05 08:55:33

标签: java jar executable-jar

我目前正在尝试制作一个包含所有库的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

我的问题:当java -jar EANcopy.jar执行JAR时,它在我生成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.

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:0)

此异常显示问题的原因:

线程“main”中的异常java.lang.NoClassDefFoundError:com / mongodb / DBObject

您尚未在lib\commons-pool-1.5.6.jar lib\jedis-2.0.0.jar lib\mongo-2.6.3.jar环境变量中指定这些库CLASSPATH,因此在其他位置运行时会失败的原因。

答案 1 :(得分:0)

类路径属性仅查找与jar共存的库,而不是jar文件中包含的库。 根据这个thread,您必须使用特殊的类加载器或使用方法来爆炸jar中包含的库。