Java - Jar не может найти включенные библиотеки и основной класс - PullRequest
0 голосов
/ 05 июля 2011

Я сейчас пытаюсь сделать 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

Моя проблема: при выполнении JAR с помощью java -jar EANcopy.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 голосов
/ 05 июля 2011

Атрибут Class-path находит только библиотеки, расположенные рядом с вашим jar-файлом, а не те, которые содержатся в вашем jar-файле. В соответствии с этим потоком вы должны либо использовать специальный загрузчик классов, либо использовать метод для взрыва включенных библиотек внутри вашего jar.

0 голосов
/ 05 июля 2011

Это исключение показывает причину проблемы:

Исключение в потоке "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, поэтому он не работает при запуске в других местах.

...