我创建了maven项目,我将log4j2依赖项添加到POM,而我的项目显然无法导入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
答案 0 :(得分:2)
您已将这些依赖项添加到pom中,因此 maven 知道您的项目依赖于log4j,但您现在还没有执行maven。您正在使用 java可执行文件来运行已编译的代码。 java不知道pom.xml是什么(因为maven是一个外部工具)。
你有几个选择:
java -cp target\your.jar;path\to\log4j2.jar;anything;else
MANIFEST.MF
file中列出您的依赖项。您可以列出绝对路径(BAD IDEA)或文件名,并将您的库放在jar旁边jar-with-dependencies
或onejar
。这样它就可以将所有的lib包装在你自己的代码旁边,并且能够找到它们。在选择之前,您最好先了解这两个选项之间的区别。答案 1 :(得分:1)
这是因为运行代码时,类路径中没有log4j jar。尝试在类路径中添加log4j jar(在-cp
开关中)。