NoClassDefFoundError运行jar文件时出现异常

时间:2014-06-04 18:08:38

标签: java jar

我下载了以下链接:

http://www.java2s.com/Code/JarDownload/java/java-json.jar.zip

然后我将jar添加到构建路径:右键单击Project>构建路径>配置构建路径>选择“库”选项卡>单击添加外部库>选择Jar文件下载。

我能够使用没有eclipse的java-json库给出任何错误。但是,当我将项目导出到jar时,没有选择将java-json Referenced Libraries包含在jar中。所以我假设通过将库添加到构建路径,我不必导出外部jar(无论如何都没有选项):

enter image description here

创建jar之后,我运行了程序:

java -jar gateway.jar -p 1732

我收到以下错误:

Exception in thread "Thread-0" java.lang.NoClassDefFoundError: org/json/JSONException
    at com.guarddoggps.main.UdpServer.run(UdpServer.java:28)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.json.JSONException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more

似乎运行时找不到类JSONException,即使它显然位于构建路径中包含的java-json.jar文件中,并且存在于Eclipse中的“Referenced Libraries”中。

我在这里可能会缺少什么?

2 个答案:

答案 0 :(得分:0)

要解决此问题,您可以使用以下命令启动应用程序:

java -cp java-json.jar -jar gateway.jar -p 1732

为了正常工作,你必须在导出的jar的同一目录中使用java-json.jar。

答案 1 :(得分:0)

你也可以考虑创建一个所谓的胖jar,它将包含所有需要的类。例如:http://fjep.sourceforge.net/

如果您不想经历自己管理所有依赖性的麻烦,请考虑使用Maven https://maven.apache.org/或Gradle https://gradle.org/等构建工具。它们将帮助您管理所有依赖项工作,甚至可以从互联网上下载所需的罐子。

相关问题