【问题标题】:Maven Project can't import log4j2 classesMaven 项目无法导入 log4j2 类
【发布时间】:2014-07-24 11:28:05
【问题描述】:

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

【问题讨论】:

    标签: java maven log4j


    【解决方案1】:

    您已将这些依赖项添加到 pom,因此 ma​​ven 知道您的项目依赖于 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 中列出您的依赖项。您可以列出绝对路径(坏主意)或文件名,并将您的库放在您的 jar 旁边
    3. 将您的 jar 打包为jar-with-dependenciesonejar。这样,它会将所有库与您自己的代码一起打包,并且能够找到它们。这两个选项之间存在差异,您最好在选择之前了解一下。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-01-10
        • 2020-07-23
        • 1970-01-01
        • 2015-08-01
        • 1970-01-01
        • 2012-09-23
        • 2015-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多