Maven Project无法导入log4j2类

时间:2014-07-24 11:28:06

标签: java maven log4j

我创建了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

2 个答案:

答案 0 :(得分:2)

您已将这些依赖项添加到pom中,因此 maven 知道您的项目依赖于log4j,但您现在还没有执行maven。您正在使用 java可执行文件来运行已编译的代码。 java不知道pom.xml是什么(因为maven是一个外部工具)。

你有几个选择:

  1. 列出cp参数中的所有依赖项,而不仅仅是jar。所以java -cp target\your.jar;path\to\log4j2.jar;anything;else
  2. 在jar文件的MANIFEST.MF file中列出您的依赖项。您可以列出绝对路径(BAD IDEA)或文件名,并将您的库放在jar旁边
  3. 将您的jar包装为jar-with-dependenciesonejar。这样它就可以将所有的lib包装在你自己的代码旁边,并且能够找到它们。在选择之前,您最好先了解这两个选项之间的区别。

答案 1 :(得分:1)

这是因为运行代码时,类路径中没有log4j jar。尝试在类路径中添加log4j jar(在-cp开关中)。