【发布时间】:2013-12-01 10:41:09
【问题描述】:
我正在尝试使用 Log4J ver 2-beta 9 的简单 Maven 应用程序。在我的 pom.xml 文件中,我有这两个依赖项(如 Log4J Maven webpage 中所述):
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.0-beta9</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0-beta9</version>
</dependency>
Eclipse 看到 Log4J 库:
但是当我打包应用程序并运行它时,会抛出这个异常:
java -cp target/notification-1.0.0.jar com.example.Sandbox
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/LogManager
at com.example.Sandbox.<clinit>(Sandbox.java:13)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.LogManager
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 1 more
我搜索了这个异常,它似乎与 CLASSPATH 变量有关。
Maven项目的CLASSPATH应该如何设置?
【问题讨论】:
-
它可能就像你的类路径中可用的更多 log4j jar 并且它正在被混淆
-
是的,我自己的另一个项目这个应用程序的依赖项也使用 Log4J,这可能是个问题吗?我不确定。
-
在 Maven 中,由
mvn package创建的 jar 不包含它的依赖项。所以你必须将 log4j-* 添加到你的类路径中。您可以检查诸如 maven-assembly-plugin 之类的东西来创建一个 jar-with-dependencies。