【问题标题】:JavaMail ClassNotFoundJavaMail ClassNotFound
【发布时间】:2009-09-04 19:15:34
【问题描述】:

我在使用 javamail 1.4.2 api 和 jdk/jre 1.6.0u16 时遇到了一个奇怪的错误。我已将解压后的 javamail-1.4.2 文件夹(以及还需要的 MySQL Connector-J 5.1.7)放在 jdk 和 jre 文件夹中,如下面的 %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";

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

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

我收到以下错误消息:

线程“main”中的异常 java.lang.NoClassDefFoundError: javax/邮件/消息异常 在 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

Here is the jar -tvf (link)

【问题讨论】:

    标签: java classpath jakarta-mail classnotfound


    【解决方案1】:

    根据java tool的文档:

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

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

    【讨论】:

    • 我会试试这个,但是我应该如何输入路径呢?我是否将这两个jar文件添加到主程序的jar中并且没有路径添加它们?或者有没有办法用 jar 文件外的相对路径来做到这一点?
    • 经过一番折腾,最终解决了一个指定的类路径。
    【解决方案2】:

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

    【讨论】:

    • 我会试试这个,但是我应该如何输入路径呢?我是否将这两个jar文件添加到主程序的jar中并且没有路径添加它们?或者有没有办法用 jar 文件之外的相对路径来做到这一点?
    • 只需将它们添加到 jar 本身的相对路径即可。实际上,你为什么要把这些 jars 放在 JDK home 的 ext 的子目录中呢?放置它们的地方真的很奇怪,imo。如果您只是将 jar 文件放在 lib/ext 中,它们会自动被拾取。
    【解决方案3】:

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

    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。我无法重现该问题。"

    和/但是:-

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

    【讨论】:

      猜你喜欢
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2011-12-07
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多