java - Maven 项目无法导入 log4j2 类

标签 java maven log4j

我创建了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,因此 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 中列出你的依赖项.你可以列出绝对路径(BAD IDEA)或文件名并将你的库放在你的 jar 旁边
  3. 将您的 jar 打包为 jar-with-dependenciesonejar .这样它将把所有的库和你自己的代码打包在一起,并且能够找到它们。在选择一个选项之前,您最好了解这两个选项之间的区别。

关于java - Maven 项目无法导入 log4j2 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24932425/

相关文章:

java - 在 ubuntu Precision 64 上使用 apt-get 安装 JDK

maven - Jenkins 部署 WAR/EAR 选项不可用

java - 我应该在 if-else block 中抛出异常吗?

java - 为浏览器启用 java 模块

maven-jaxb2-plugin 失败,必须存在 JAXB 版本属性

java - Tomcat 服务器,卡在 "INFO : server startup in t ms"

java - Log4J SQL 日志记录 TopLink

java - 未找到 com.models.entities.OrderEntity 类型的属性

java - Log4j,将 Web 应用配置为使用相对路径

java - Android主模板布局文件?