我在我的java项目中使用了log4j logger,并在我的pom.xml
中有以下内容:
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
我在名为&#34; resources&#34;的目录中添加了log4j.properties
。我已经在intelliJ项目结构中添加了一个源代码。
当我构建项目时,它会成功构建。但是当我尝试通过运行jar
运行java -jar myproject.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
答案 0 :(得分:1)
这是因为您只是在没有依赖罐的情况下运行jar。您需要使用-cp
命令在类路径中添加所有依赖项。
另一种选择是使用maven-shade-plugin
创建一个&#34; Fat&#34; jar包含同一jar中的依赖java类。这使得使用命令行运行jar非常简单。要使用它,只需将以下代码段添加到您的pom插件部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass><ENTER_YOUR_MAINCLASS_HERE></mainClass>
<manifestEntries>
<Class-Path>..</Class-Path>
</manifestEntries>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/cxf/bus-extensions.txt</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
注意:请在<ENTER_YOUR_MAINCLASS_HERE>
如果您确实认为存在多个次要包含不同版本的相同依赖性问题,那么您应该使用
mvn dependency:tree
命令获取正在复制的库的详细信息,然后从依赖项中删除其中一个版本。
答案 1 :(得分:0)
请尝试清理 maven存储库,有时会选择相同jar的多个版本。
答案 2 :(得分:0)
这是log4j版本2依赖项。请试试这个。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.10.0</version>
</dependency>