Исключение NoClassDefFoundError

Я работаю над почтовым приложением, которое я хотел бы сжать в файл .jar, чтобы пользователь мог дважды щелкнуть его для запуска. Я использую Javamail API. В eclipse я «добавил внешний jar» и добавил файл mail.jar, и я смог использовать все классы внутри mail.jar при разработке в eclipse. Теперь я хочу упаковать их в файл jar, поэтому я использовал инструмент -jar в командной строке и указал файл манифеста и все мои файлы классов, однако, когда я запускаю банку, я получаю это исключение:

   Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Multipart
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: javax.mail.Multipart
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 6 more

Я знаю, что это как-то связано с тем, что файл mail.jar отсутствует в файле jar, и я пытался включить файл mail.jar в свое приложение, но ничего не работает. Что я могу сделать?


person Alejandro    schedule 22.04.2012    source источник
comment
Возможно, вы «пробовали», но вам не удалось добавить mail.jar в свой путь к классам.   -  person user207421    schedule 23.04.2012


Ответы (2)


Как вы запускаете свое приложение? Если вы запускаете свое приложение через командную строку, вы должны добавить необходимые jar-файлы, разделенные точкой с запятой, в путь к классам вашего приложения как таковой:

java -cp mail.jar;other_jars ваш-основной-класс

person kyiu    schedule 22.04.2012

Если вы хотите, чтобы все было в одном файле jar, чтобы вы могли дважды щелкнуть этот файл jar и запустить приложение, у вас есть два основных варианта:

  1. Извлеките все из jar-файлов, которые вы хотите включить, объедините их с вашим приложением и создайте новый jar-файл с объединенным содержимым. Не забывайте, что есть файлы, отличные от файлов .class, которые имеют значение. Я не эксперт по Eclipse, но я знаю, что некоторые из способов, которыми Eclipse делает это, будут включать только файлы .class, которые не будут работать.

  2. Используйте такой инструмент, как "onejar", который позволяет "вкладывать" файлы jar в файлы jar. .

Удачи!

person Bill Shannon    schedule 23.04.2012