1

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

.;"C:\Program 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 Files\Java\jdk1.6.0_16\bin";"C:\Program Files\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\邮件.jar";

但是当我用命令运行我编译的 jar

C:\Program Files\Java\jre6\bin>java -cp %classpath% -jar "C:\Program Files\GameLabInventory\GameLabInventory_7.0.jar"

我收到以下错误消息:

线程“main”中的异常 java.lang.NoClassDefFoundError: javax/mail/MessagingException at gamelab.inventory.GameLabInventory.main(GameLabInventory.java:62) 原因:java.lang.ClassNotFoundException: java.net 上的 javax.mail.MessagingException .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) at java.lang.ClassLoader.loadClassInternal(Unknown Source) ... 1 更多

我在这里找不到我的设置有什么问题,希望你们能帮助我。谢谢!

这是清单文件:

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

这是 jar -tvf(链接)

4

3 回答 3

1

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

于 2009-09-04T19:17:56.350 回答
1

根据java工具的文档:

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

您可以在JAR 文件中指定Class-Path 属性,该属性“指定 [您的] 应用程序或扩展所需的扩展或库的相对 URL”。

于 2009-09-04T19:23:59.440 回答
0

我遇到了类似的问题(与您的问题不同,因为我的与弹簧有关)并发现此链接很有帮助:

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

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

“我设法使用 Java 6 (1.6.0_07) 在我的 Mac 开发机器上重现了该问题。然后我在我的 Mac 上使用 Java 5 进行了尝试,但无法重现该问题。至关重要的是,在 Java 5 的情况下,JVM 会正在使用 1.1.1 javax 激活包中的 javax.activation API 和实现,而在 Java 6 上,它将从 JRE 中使用它们(作为 JRE 一部分的任何内容都优先于 dm Server 的 lib 目录中的内容)。我然后在 Ubuntu 机器上尝试了该应用程序,这次使用的是 Java 6 1.6.0_10。我无法重现该问题。”

但是:-

“我刚刚遇到了同样的问题”No object DCH for MIME type”但是在 Ubuntu java 版本“1.6.0_13”上。所以我不知道你们是如何通过升级到 1.6.0_11 来解决它的。我所做的是将 mailcab.default 复制到我自己的包中,它可以工作。似乎是一个我还不完全理解的类加载问题。

于 2009-09-22T10:37:50.403 回答