简体   繁体   中英

Unable load jar from my jar: NoClassDefFoundError

I have this jar:

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

The MANIFEST.MF

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

In this jar i used two external jar files, postgresql-9.1-901.jdbc4.jar, javax.mail.jar. I also put those into /root/java .

but when i run it use

java -jar weekly.jar

It shows those two jars class can't find

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)

even i try to put those two jars to my $CLASSPATH

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

It also shows same error result. I can successfully run it in my Mac, but when i try to remove it to my server CentOS system ,it shows those NoclassDefFounderror.

Finding a JAR file using a classpath is similar to finding a package file in a classpath. The difference is that when you specify a path for a JAR file, you must include the name of the JAR file at the end of the path .

So you can try something like this:

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

Another option is to put your jars into jre/lib/ext (but I don't think it's a good idea)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM