【问题标题】:java.lang.NoClassDefFoundError thrown when running jar file运行 jar 文件时抛出 java.lang.NoClassDefFoundError
【发布时间】:2012-09-05 22:43:33
【问题描述】:

我正在尝试在 Mac 上运行我的 jar 文件(尚未在任何其他平台上尝试过)。当我使用 java -jar MyApp.jar 运行时,出现以下错误

堆栈跟踪:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
at tabalchi.MyLogger.getLogger(MyLogger.java:51)
at tabalchiApp.TabalchiApp.printSystemProps(TabalchiApp.java:117)
at tabalchiApp.TabalchiApp.main(TabalchiApp.java:37)

所以,如您所见,主类已被识别。 这是清单文件。 --->

Manifest-Version: 1.0
Class-Path: . jars/log4j-1.2.16.jar jars/jfugue-4.1.0-20120125.jar jars/gervill.jar jars/AppleJavaExtensions.jar  
Main-Class: tabalchiApp.TabalchiApp
SplashScreen-Image: tabalchiApp/resources/splash.png

META-INF/MANIFEST.MF
jars/AppleJavaExtensions.jar
jars/gervill.jar
jars/jfugue-4.1.0-20120125.jar
jars/log4j-1.2.16.jar
tabalchiApp/TabalchiApp.class   <-- this is the main class
tabalchiApp/otherClasses.....class

我已经阅读了很多关于运行 .jar 文件的帖子,但没有一个解决方案对我有用。我非常感谢您对此提供的帮助。

我正在通过从 Eclipse 导出来创建 jar 文件。如果我导出到可运行的 jar 文件,那么我无法控制清单文件的制作。我需要在清单文件中添加启动图像。我在可运行的 jar 导出方面遇到了一些其他问题。因此这条路。

【问题讨论】:

  • 你需要在你的类路径中加入 log4j
  • 使用 maven 构建可运行的 jars。很简单!
  • 你能从你的IDE运行你的代码吗?
  • 是的,代码在 IDE 中运行良好

标签: java


【解决方案1】:

似乎缺少log4j。它在类路径中期待jars/log4j-1.2.16.jar

jars/log4j-1.2.16 

应该在文件夹结构下。

 jars/log4j-1.2.16.jar

【讨论】:

  • 抱歉,这是我的错字。其实就是jars目录下的log4j-1.2.16.jar。
【解决方案2】:

您尝试在哪个目录中使用: java -jar MyApp.jar

您可以在类路径中指定包/目录以确保它们被找到。

【讨论】:

  • jar 文件在桌面上。我正在从桌面运行它。
【解决方案3】:

好的,根据这个链接,

http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

Class-Path 标头指向本地网络上的类或 JAR 文件,而不是 JAR 文件中的 JAR 文件或可通过 Internet 协议访问的类。要将 JAR 文件中的 JAR 文件中的类加载到类路径中,您必须编写自定义代码来加载这些类。例如,如果 MyJar.jar 包含另一个名为 MyUtils.jar 的 JAR 文件,则不能使用 MyJar.jar 清单中的 Class-Path 标头将 MyUtils.jar 中的类加载到类路径中。

所以,我的 jar 文件中似乎无法包含其他 jar 文件。

【讨论】:

    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2017-07-16
    • 2013-11-04
    • 1970-01-01
    • 2011-02-02
    • 2020-04-09
    相关资源
    最近更新 更多