运行jar文件时引发java.lang.NoClassDefFoundError

运行jar文件时引发java.lang.NoClassDefFoundError,java,Java,我试图在Mac上运行我的jar文件(还没有在任何其他平台上尝试过)。当我使用java-jarmyapp.jar运行时,我得到以下错误 Stacktrace: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger at tabalchi.MyLogger.getLogger(MyLogger.java:51) at tabalchiApp.TabalchiApp.printSystemP

我试图在Mac上运行我的jar文件(还没有在任何其他平台上尝试过)。当我使用java-jarmyapp.jar运行时,我得到以下错误

Stacktrace:

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)
因此,正如您所看到的,主类已被识别。 这是清单文件。 --->

META-INF/MANIFEST.MF
jars/AppleJavaExtensions.jar
jars/gervill.jar
jars/jfugue-4.1.0-20125.jar
jars/log4j-1.2.16.jar

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

jars/log4j-1.2.16 
应该在文件夹结构下

 jars/log4j-1.2.16.jar

似乎缺少
log4j
。类路径中应该有
jars/log4j-1.2.16.jar

jars/log4j-1.2.16 
应该在文件夹结构下

 jars/log4j-1.2.16.jar

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


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

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


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

好的,因此根据此链接

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


所以,似乎我不能在我的jar文件中包含其他jar文件

好的,那么根据这个链接

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


所以,似乎我不能在我的jar文件中包含其他jar文件

您需要在classpathUse maven中使用log4j来构建可运行的JAR。这很简单!您能够从IDE运行代码吗?是的,代码从IDE开始运行良好。您需要将log4j放入类路径使用maven来构建可运行的JAR。这很简单!你能从IDE上运行你的代码吗?是的,代码从IDE上运行的很好对不起,这是我的错误。事实上,在jars目录中的是log4j-1.2.16.jar。很抱歉,这是我的输入错误。事实上,是log4j-1.2.16.jar位于jars目录中。jar文件位于桌面上。我正在桌面上运行这个。jar文件在桌面上。我正在桌面上运行这个。