我的jar中无法加载jar:NoClassDefFoundError

时间:2014-11-13 04:03:51

标签: java

我有这个罐子:

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

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。

1 个答案:

答案 0 :(得分:0)

  

使用类路径查找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

另一种选择是将你的罐子放入jre / lib / ext(但我认为这不是一个好主意)