Ошибка Java при использовании JAR, java.lang.NoClassDefFoundError: javax / mail / Store - PullRequest
2 голосов
/ 24 июня 2011

Я делаю Java-приложение, которое использует Javamail, и оно прекрасно работает, когда я его компилирую.Я хочу превратить его в файл jar, чтобы его можно было легко перемещать и запускать.Проблема в том, что я получаю эту ошибку при попытке запустить jar из строки cmd

java -jar ActriveTray2.jar

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Store
        at stockApp.init(stockApp.java:11)
        at ActiveTray.main(ActiveTray.java:31)
        Caused by: java.lang.ClassNotFoundException: javax.mail.Store
        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)

Вот что находится в моем файле jar

  • images / tray.gif
  • META-INF / MANIFEST.MF
  • ActiveTray.class
  • ActiveTray.java
  • config.class
  • config.java
  • GmailFetch.class
  • GmailFetch.java
  • stockApp $ 1.class
  • stockApp.class
  • stockApp.java

Я думаю, что проблема заключается в classpath, где банка не знает, где находится баночка javamail.Мой classpath установлен правильно, когда я выполняю код (java ActiveTray2), он работает нормально ... help :(

Ответы [ 4 ]

9 голосов
/ 24 июня 2011

вам нужно добавить банки, от которых вы зависите, в файл манифеста, а также добавить их в созданную вами банку.java -jar будет игнорировать путь к классу вашей среды. Из документов java:

-jar: при использовании этой опции файл JAR является источником всех пользовательских классов, а другие параметры пути к классам пользователей игнорируются.

Таким образом, вы можете добавить строку в файл манифеста, например:

Class-Path: mail.jar

, в свой файл манифеста.

1 голос
/ 24 июня 2011

Когда вы запускаете исполняемый jar-файл в java, classpath игнорируется, как переменная окружения, так и classpath командной строки. Вы должны указать его в файле манифеста вашего исполняемого файла JAR.

Вот некоторая информация из Википедии :

Вы должны указать:

Main-Class: org.mypackage.HelloWorld
Class-Path: lib/supportLib.jar
<additional line feed and carriage return>

В пути к классам будет указано расположение используемых вами библиотек относительно расположения вашего основного исполняемого файла jar .

С уважением, Stéphane

0 голосов
/ 12 июня 2013

Та же проблема, с которой я столкнулся в своем проекте. Причина в том, что файл JAR отсутствует или не находится в пути к классам. Два шага для решения этой проблемы.

  1. Сначала добавьте JavaMail API 1.4.7 jar в путь к классам.

  2. Затем добавьте эту же банку в библиотеку сервера. В моем приложении я использовал Apache Tomcat 7. Я положил банку в папку lib

0 голосов
/ 24 июня 2011

В вашем пути к классам должны присутствовать требуемые почтовые jar-файлы реализации.

...