我正在使用javax.mail .jar文件来读取邮件消息。但是当我运行代码时,我得到以下异常。
我在classpath中添加了mail.jar。
Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/MessagingE
xception
Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
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)
Could not find the main class: MasterProcess. Program will exit.
任何解决这个问题的建议请...
答案 0 :(得分:1)
你没有得到MessagingException
,虚拟机抱怨它无法找到 MessagingException
(虽然它可能正在寻找它,因为它想要抛出它,但这些都是以后的问题。)
检查你的mail.jar是否真的包含这个类,并检查你的mail.jar是否真的在classpath上。
最后可能发生的是该类与您的Java版本不兼容。例如,为1.5编译的类不会在1.4上运行。
答案 1 :(得分:1)
在eclipse中工作而不是在命令行中清楚地说明项目中存在多个版本的邮件jar。
前:
你有3个Jars,Jar X,Jar Y和Jar Z。
如果你知道JAR X可能已经捆绑在JAR Z中(在这种情况下是邮件jar,但有些不同的版本。
那么拥有同一个jar的多个版本有什么问题? 您有两个不同的版本,您将不知道哪个版本将在您的项目中引用。 (所以如果你在项目中从mail-2.jar中寻找一些类,如果通过类加载器引用mail-1.jar,你将得到类找不到异常)
那么它如何在Eclipse上正常工作? 在eclipse中你可以看到ORDER库有一个选项,这些将以相同的顺序引用,但是在命令提示符下运行时我们用来加载as lib / *加载所有收集,我们不知道哪个lib将首先加载。
如何识别罪魁祸首并解决问题?
选项1:
请参阅您正在使用的库的文档页面/用户指南,以查看它们中包含的内容。
选项2:
现在逐一降低订单,看看你收到错误的地方。 (如果您希望找到导致此问题的jar,请重复参考)
提取具有重复引用的jar,删除JAR中的副本并重新打包。 (如果需要)
答案 2 :(得分:0)
还要确保你还有java activation.jar jar。
您是否有机会使用App Server(例如Jboss),如果是这样,只需检查类加载模型(在jboss中使用单个类加载模型,您可能正在加载一个不是最新版本的jar)
答案 3 :(得分:0)
我也遇到了同样的错误。在我编译时,我正确地使用了罐子。在命令行上运行时,我发现没有包含mail.jar(javamail API)。