我在我的 java 应用程序中使用 log4j 2.3。我通过 maven 添加了依赖项。
在 eclipse 中运行程序时一切正常,但是当我用 maven 打包并尝试运行 jar 时,出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache logging/log4j/LogManager
at main.myclass.<clinit>(myclass.java:11)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
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
为什么在从 jar 运行时找不到类?
添加 log4j 1.2
也没有用。该程序在 eclipse 中运行良好,因此不应缺少依赖项。
原文由 Pabi 发布,翻译遵循 CC BY-SA 4.0 许可协议
当您从命令行运行应用程序 jar 时,您的依赖 jar 在运行时不可用。您需要将这两个插件中的任何一个包含到 pom.xml 中,以便您的依赖项在运行时可用。
使用:maven-shade-plugin
使用:maven依赖插件
当您执行
mvn package
时,它将生成 uber jar / 或将依赖项复制到 outputDirectory。我更喜欢 maven-shade-plugin 来生成一个 jar 来处理所有依赖项。