JavaMail ClassNotFound

时间:2009-09-04 19:15:34

标签: java classpath javamail classnotfound

我使用javamail 1.4.2 api和jdk / jre 1.6.0u16遇到了一个奇怪的错误。我在jdk和jre文件夹中放置了解压缩的javamail-1.4.2文件夹(以及需要的MySQL Connector-J 5.1.7),如下面的%classpath%。

  

.;“C:\程序   Files \ Java \ jdk1.6.0-16 \ jre \ lib \ ext \ mysql-connector-java-5.1.7-bin“;”C:\ Program Files \ Java \ jdk1.6.0-16 \ jre \ lib \ ext \ JavaMail的-1.4.2 \ mail.jar中 “;” C:\ PROGRAM   文件\的Java \ jdk1.6.0_16 \ BIN “;” C:\ PROGRAM   文件\ GameLabInventory \ GameLabInventory-7.0.jar “;” C:\ PROGRAM   Files \ Java \ jre6 \ lib \ ext \ mysql-connector-java-5.1.7-bin“;”C:\ Program Files \ Java \ jre6 \ lib \ ext \ javamail-1.4.2 \ mail.jar“; < / p>

但是当我使用命令

运行我编译的jar时
C:\Program Files\Java\jre6\bin>java -cp %classpath% -jar "C:\Program Files\GameLabInventory\GameLabInventory_7.0.jar"

我收到以下错误消息:

  

线程“main”中的异常   java.lang.NoClassDefFoundError:   使用javax /邮件/ MessagingException           在gamelab.inventory.GameLabInventory.main(GameLabInventory.java:62)   引起:   抛出java.lang.ClassNotFoundException:   javax.mail.MessagingException的           在java.net.URLClassLoader $ 1.run(未知   资源)           在java.security.AccessController.doPrivileged(Native   方法)           在java.net.URLClassLoader.findClass(未知   资源)           在java.lang.ClassLoader.loadClass(未知   资源)           在sun.misc.Launcher $ AppClassLoader.loadClass(未知   资源)           在java.lang.ClassLoader.loadClass(未知   资源)           在java.lang.ClassLoader.loadClassInternal(未知   资源)           ......还有1个

我的设置在这里找不到任何问题,希望你们可以帮助我。谢谢!

这是清单文件:

Manifest-Version: 1.0
Main-Class: gamelab.inventory.GameLabInventory

Here is the jar -tvf (link)

3 个答案:

答案 0 :(得分:1)

使用-jar时,java会覆盖类路径设置(-cp)。但是,在此配置中,可以在jar的清单文件中指定类路径jar。

答案 1 :(得分:1)

根据java tool的文档:

  

使用[-jar]选项时,   JAR文件是所有用户的来源   类和其他用户类路径   设置被忽略。

您可以在Class-Path attribute中指定JAR file“指定[您的]应用程序或扩展程序所需的扩展程序或库的相对URL。”

答案 2 :(得分:0)

我遇到了类似的问题(与你的问题不一样,因为我与春天有关),发现此链接很有用:

http://forum.springsource.org/showthread.php?t=65840&page=3

似乎JDK中的实现更改可能导致此行为。引用链接:

“我设法使用Java 6(1.6.0_07)在我的Mac开发盒上重现了这个问题。然后我使用Java 5在我的Mac上尝试了它,并且无法重现这个问题。至关重要的是,在Java 5的情况下, JVM将使用javax.activation API和1.1.1 javax激活包中的实现,而在Java 6上,它将使用JRE中的任何内容(JRE的任何部分优先于dm Server的lib目录中的内容)然后我在Ubuntu盒子上尝试了这个应用程序,这次是使用Java 6 1.6.0_10。我无法重现这个问题。“

和/但是: -

“我刚刚遇到了同样的问题”没有MIME类型的对象DCH“但是在Ubuntu java版本”1.6.0_13“。所以我不知道你们是如何通过升级到1.6.0_11解决它的。 我所做的是将mailcab.default复制到我自己的包中,并且它有效。似乎是一个我还不完全理解的类加载问题。“