Изключение NoClassDefFoundError

Работя върху приложение за изпращане на имейли, което бих искал да компресирам в .jar файл, така че потребителят да може да щракне два пъти, за да стартира. Използвам API на javamail. В eclipse „добавих външен буркан“ и добавих файла mail.jar и успях да използвам всички класове вътре в mail.jar, докато разработвам в eclipse. Сега искам да ги пакетирам в jar файл, така че използвах инструмента -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)


Как изпълнявате приложението си? Ако изпълнявате приложението си през командния ред, трябва да добавите необходимите буркани, разделени с точка и запетая, в пътя на класа на приложението като такъв:

java -cp mail.jar; други_яри вашият основен клас

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