java NoClassDefFoundError:org/apache/log4j/Logger
我在java项目中使用了log4j logger,在我的pom.xml
中有以下内容:
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
我在名为“resources”的目录中添加了log4j.properties
,我在intelliJ项目结构中将其作为源添加
当我构建项目时,它成功构建。但是当我试图通过运行java -jar myproject.jar
来运行jar
文件时,它给出了以下错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
at org.wso2.confvalidator.ConfigValidator.<clinit>(ConfigValidator.java:40)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
# 1 楼答案
这是log4j版本2的依赖关系。请试试这个
# 2 楼答案
请在清理您的maven存储库后尝试,有时它会选择相同罐子的多个版本
# 3 楼答案
这是因为您只是在运行jar,而没有依赖的jar。需要使用
-cp
命令在类路径中添加所有依赖项另一种选择是使用
maven-shade-plugin
创建一个“胖”jar,其中包含同一jar中的依赖java类。这使得使用命令行运行JAR变得相当简单。要使用它,只需将以下代码片段添加到pom插件部分:注意:请在
<ENTER_YOUR_MAINCLASS_HERE>
适当地替换jar的主类如果您真的认为同一个依赖关系存在问题,并且多次包含不同的版本,那么您应该使用
命令获取要复制的库的详细信息,然后从依赖项中删除其中一个版本