2012-06-18 321 views
1

我想在Mac上运行我的jar文件(还没有在任何其他平台上试过)。当我运行使用Java的罐子MyApp.jar我收到以下错误当运行jar文件时抛出java.lang.NoClassDefFoundError

堆栈跟踪:

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 

< --- 而在jar文件如下文件夹结构。 --->

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文件,那么我无法控制清单文件的制作。我需要在清单文件中添加splash图像。而我在运行jar导出时遇到了一些其他问题。因此,这条道路。

+1

您需要将log4j放入您的类路径中 –

+0

使用maven构建可运行jar包。这很简单! – Ilya

+0

你能够从IDE运行你的代码吗? –

回答

4

看来log4j是missing.it期待在类路径中jars/log4j-1.2.16.jar

jars/log4j-1.2.16 

应该在文件夹结构下。

jars/log4j-1.2.16.jar 
+0

对不起,这是我的一个错字。它实际上是jars目录中的log4j-1.2.16.jar。 – Poorav

0

在哪个目录,你想使用: Java的罐子MyApp.jar

您可以指定在classpath中包/目录,以确保他们被发现。

+0

该jar文件在桌面上。我从桌面运行这个。 – Poorav

0

好了,所以根据这个链接,

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

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

所以,看来我不能在我的jar文件中包含其他jar文件。

相关问题