我正在尝试使用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?
答案 0 :(得分:3)
Maven是一个构建工具。它对运行最终应用程序没有帮助。
您可以使用mvn exec:java -Dexec.mainClass="com.example.Sandbox"
来运行您的应用(请参阅问题Maven Run Project),但是当您必须向其传递参数时,这会变得乏味。
您可以使用mvn dependency:build-classpath
这会将类路径打印到控制台。请注意,它将缺少target/notification-1.0.0.jar
该领域的另一个有用工具是assembly plugin;当您指定描述符jar-with-dependencies
时,它将创建一个非常大的JAR,并将所有依赖项汇总到一个文件中。