JavaMail 类未找到
我在使用 javamail 1.4.2 api 和 jdk/jre 1.6.0u16 时遇到了一个奇怪的错误。我已将解压缩的 javamail-1.4.2 文件夹(以及还需要的 MySQL Connector-J 5.1.7)放置在 jdk 和 jre 文件夹中,如下面的 %classpath% 所示。
.;"C:\程序 文件\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 文件\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/mail/MessagingException 在 gamelab.inventory.GameLabInventory.main(GameLabInventory.java:62) 造成原因: java.lang.ClassNotFoundException: javax.mail.MessagingException 在 java.net.URLClassLoader$1.run(未知 来源) 在java.security.AccessController.doPrivileged(本机 方法) 在 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
I've run in to a strange error with the javamail 1.4.2 api and jdk/jre 1.6.0u16. I've placed the unzipped javamail-1.4.2 folder (along with the MySQL Connector-J 5.1.7 also needed) in both the jdk and jre folders as in the %classpath% below.
.;"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\mail.jar";
But when I run my compiled jar with the command
C:\Program Files\Java\jre6\bin>java -cp %classpath% -jar "C:\Program Files\GameLabInventory\GameLabInventory_7.0.jar"
I get the following error message:
Exception in thread "main"
java.lang.NoClassDefFoundError:
javax/mail/MessagingException
at gamelab.inventory.GameLabInventory.main(GameLabInventory.java:62)
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)
at java.lang.ClassLoader.loadClassInternal(Unknown
Source)
... 1 more
I can't find anything wrong with my setup here, hopefully you guys can help me out. Thanks!
Here is the manifest file:
Manifest-Version: 1.0
Main-Class: gamelab.inventory.GameLabInventory
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据java工具的文档:
您可以指定 Class-Path 属性 在您的JAR 文件 “指定[您的]应用程序或扩展程序所需的扩展程序或库的相对 URL。”
According to the documentation for the java tool:
You can specify a Class-Path attribute in yourJAR file that "specifies the relative URLs of the extensions or libraries that [your] application or extension needs."
使用 -jar 时,java 会覆盖类路径设置 (-cp)。但是,在此配置中,可以在 jar 的清单文件中指定类路径 jar。
When using -jar, java overrides the classpath setting (-cp). In this configuration, however, classpath jars can be specified in the manifest file of your jar.
我遇到过类似的问题(与您的问题不同,因为我的问题与 spring 相关),并发现此链接很有帮助:
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 复制到我自己的包中,它起作用了。似乎是一个类加载问题,我还没有完全理解。”
I've experienced a similar issue (not identical to yours, since mine is spring-related) and found this link was helpful:
http://forum.springsource.org/showthread.php?t=65840&page=3
It seems that implementation changes in the JDK might be causing this behaviour. Quoting from the link:
"I managed to reproduce the problem on my Mac development box using Java 6 (1.6.0_07). I then tried it on my Mac using Java 5, and could not reproduce the problem. Crucially, in the Java 5 case, the JVM would be using the javax.activation API and implementation from the 1.1.1 javax activation bundle, whereas on Java 6, it would be using them from the JRE (anything that's part of the JRE takes precedence over what's in dm Server's lib directory). I then tried the app on an Ubuntu box, this time using Java 6 1.6.0_10. I could not reproduce the problem."
and/but:-
"I've just had this same problem "No object DCH for MIME type" but on Ubuntu java version "1.6.0_13". So I don't know how you guys solved it by upgrading to 1.6.0_11.
What I did is copy the mailcab.default to my own bundle and it worked. Seems to be a classloading problem which I don't fully understand yet."