使用JAR,java.lang.NoClassDefFoundError:javax / mail / Store的Java错误

时间:2011-06-24 18:29:12

标签: java jar executable-jar

我正在创建一个使用Javamail的java应用程序,在编译它时效果很好。我想将它变成一个jar文件,以便它可以轻松移动并执行。问题是当我尝试从cmd行运行jar时出现此错误

java -jar ActriveTray2.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

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

4 个答案:

答案 0 :(得分:9)

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

  

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

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

Class-Path: mail.jar

到您的清单文件。

答案 1 :(得分:1)

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

以下是wikipedia的一些信息:

你的证明必须包括:

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

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

此致  斯特凡

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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