我创建了maven项目,我在POM中添加了log4j2依赖,我的项目显然不能导入LogManager类。为什么?这是 Maven 控制台的输出。
c:\Users\Dawid\Desktop\Pracbaza\my-project>java -cp target\my-project-1.0-SNAPSHOT.jar com.spica.project.App
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
at com.spica.project.App.<clinit>(App.java:7)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
最佳答案
您已将这些依赖项添加到 pom,因此 maven 知道您的项目依赖于 log4j,但您现在并未执行 maven。您正在使用java 可执行文件 来运行编译后的代码。 java 不知道 pom.xml 是什么(因为 maven 是一个外部工具)。
你有几个选择:
- 在 cp 参数中列出所有依赖项,而不仅仅是你的 jar。所以
java -cp target\your.jar;path\to\log4j2.jar;anything;else
- 在你的 jar 文件的
MANIFEST.MF
file 中列出你的依赖项.你可以列出绝对路径(BAD IDEA)或文件名并将你的库放在你的 jar 旁边 - 将您的 jar 打包为
jar-with-dependencies
或onejar
.这样它将把所有的库和你自己的代码打包在一起,并且能够找到它们。在选择一个选项之前,您最好了解这两个选项之间的区别。
关于java - Maven 项目无法导入 log4j2 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24932425/