簡體   English   中英

無法從我的jar中加載jar:NoClassDefFoundError

[英]Unable load jar from my jar: NoClassDefFoundError

我有這個罐子:

/weekly/
  /database.class
  /report.class
/META-INF
  /MANIFEST.MF

清單文件

Manifest-Version: 1.0
Main-Class: weekly.report
Class-Path: /root/java

在這個jar中,我使用了兩個外部jar文件,分別是postgresql-9.1-901.jdbc4.jar,javax.mail.jar。 我也將它們放到/root/java

但是當我運行它時

java -jar weekly.jar

它表明這兩個罐子類找不到

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/internet/AddressException
Caused by: java.lang.ClassNotFoundException: javax.mail.internet.AddressException
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)

甚至我嘗試將這兩個罐子放到我的$ CLASSPATH中

       /usr/java/jdk1.6.0_21/lib:/usr/java/jdk1.6.0_21/jre/lib

它還顯示相同的錯誤結果。 我可以在Mac上成功運行它,但是當我嘗試將其刪除到服務器CentOS系統上時,它會顯示那些NoclassDefFounderror。

使用類路徑查找JAR文件類似於在類路徑中查找程序包文件。 區別在於,當您為JAR文件指定路徑時, 必須在該路徑的末尾包含JAR文件的名稱

因此,您可以嘗試執行以下操作:

java -classpath /usr/java/jdk1.6.0_21/lib/javax.mail.jar:/usr/java/jdk1.6.0_21/jre/lib/postgresql-9.1-901.jdbc4.jar -jar weekly.jar

另一個選擇是將jars放入jre / lib / ext(但我認為這不是一個好主意)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM