【问题标题】:Java error using JARs, java.lang.NoClassDefFoundError: javax/mail/Store使用 JAR 的 Java 错误,java.lang.NoClassDefFoundError: javax/mail/Store
【发布时间】:2011-09-22 06:23:58
【问题描述】:

我正在制作一个使用 Javamail 的 Java 应用程序,当我编译它时效果很好。我想把它做成一个 jar 文件,这样它就可以很容易地移动和执行。问题是当我尝试从 cmd 行运行 jar 时出现此错误

java -jar ActiveTray2.jar

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Store
        at stockApp.init(stockApp.java:11)
        at ActiveTray.main(ActiveTray.java:31)
        Caused by: java.lang.ClassNotFoundException: javax.mail.Store
        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)

这是我的 jar 文件中的内容

  • images/tray.gif
  • META-INF/MANIFEST.MF
  • ActiveTray.class
  • ActiveTray.java
  • config.class
  • config.java
  • GmailFetch.class
  • GmailFetch.java
  • stockApp$1.class
  • stockApp.class
  • stockApp.java

我认为问题在于类路径,jar 不知道 javamail jar 所在的位置。当我执行代码(java ActiveTray2)时,我的类路径设置正确......帮助:(

【问题讨论】:

    标签: java jar executable-jar


    【解决方案1】:

    您需要将依赖的 jar 添加到清单文件中,并将它们添加到您正在创建的 jar 中。 java -jar 将根据设计忽略您环境的类路径。 From the java docs:

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

    因此,您可以在清单文件中添加一行,例如:

    Class-Path: mail.jar
    

    到您的清单文件。

    【讨论】:

    • 谢谢,但我想我不知道如何更新我的清单文件来做到这一点。我在清单中添加了 Class-Path: mail.jar,但它仍然无法正常工作...
    • 当然,当您运行应用程序时,jar 也必须位于正确的位置。
    • 那么我是否将 mail.jar 添加到我自己的 jar 中?我只是不知道如何引用它所以类路径是正确的?我已经用谷歌搜索了一个小时......
    • rob,在我上面的示例中,mail.jar 需要位于 jar 的“根目录”中。你也可以把它放在一个目录中,但是你需要在清单的 Class-Path 指令中指定那个目录。
    • rob,当你 jar -tvf myjar.jar 时,你看到 lib/mail.jar 了吗?
    【解决方案2】:

    当您在 java 中启动可运行的 jar 文件时,将忽略类路径,包括环境变量和命令行类路径。您必须在可运行 jar 文件的清单文件中指定它。

    这是来自wikipedia的一些信息:

    您的清单必须包括:

    Main-Class: org.mypackage.HelloWorld
    Class-Path: lib/supportLib.jar
    <additional line feed and carriage return>
    

    类路径将列出您使用的库的位置相对于您的主要可运行 jar 文件的位置

    问候, 斯蒂芬

    【讨论】:

      【解决方案3】:

      所需的邮件实现 jar 应该存在于您的类路径中。

      【讨论】:

        【解决方案4】:

        我在项目中遇到了同样的问题。原因是 jar 文件丢失或不在类路径中。解决此问题的两个步骤。

        1. 首先将JavaMail API 1.4.7 jar添加到类路径中。

        2. 然后将相同的 jar 添加到服务器库。在我的应用程序中,我使用了 Apache tomcat 7。我将 jar 放在 lib 文件夹中

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多