Eclipse 如何将log4j1.2完全集成到maven构建中
一周来,我一直在绞尽脑汁,试图找出我在这里做错了什么,包括试图在这个网站上和通过谷歌找到解决方案,但我想也许我不知道我在搜索什么。非常感谢您的帮助 我的目标是在我在EclipseKepler中创建的Maven 2 Java项目中使用log4j 1.2.17。我从Maven原型:quickstart中重新创建了这个问题,然后在pom.xml中添加了log4j依赖项,如下所示Eclipse 如何将log4j1.2完全集成到maven构建中,eclipse,maven,log4j,Eclipse,Maven,Log4j,一周来,我一直在绞尽脑汁,试图找出我在这里做错了什么,包括试图在这个网站上和通过谷歌找到解决方案,但我想也许我不知道我在搜索什么。非常感谢您的帮助 我的目标是在我在EclipseKepler中创建的Maven 2 Java项目中使用log4j 1.2.17。我从Maven原型:quickstart中重新创建了这个问题,然后在pom.xml中添加了log4j依赖项,如下所示 <dependency> <groupId>log4j</groupId>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
但是在maven构建之后在命令行上运行“java-cp target/dc-0.1.jar dc.dc.App”会导致以下结果:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/LogManager
at DC.dc.App.<clinit>(App.java:14)
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:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
java类路径中缺少log4jjar。 如果知道log4jjar在文件系统上的位置,可以将其附加到
-cp
类路径参数中
如果要复制或捆绑依赖项,可以考虑使用,请参阅。讨论了许多备选方案
测试jar项目并让maven构建运行时类路径的另一种方法是通过maven单元或 把它拼出来后,解决办法就容易多了。我在pom.xml中添加了以下内容:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
.我喜欢Furlong提供的答案。如果它因任何原因不起作用,您可以尝试下面的解决方案
我认为您需要使用以下maven插件:
This plugin provides the capability to package the artifact in an uber-jar,
including its dependencies and to shade -
i.e. rename - the packages of some of the dependencies.
你可以
当您拥有插件并执行以下操作时:
mvn package
它将构建一个所谓的uberjar。它包含所有依赖jar文件的内容,作为一个大而胖的jar文件
因此,它也将包含org.apache.log4j.LogManager类。当我在Eclipse中运行没有maven的应用程序时,我收到了正确的输出,因此我的pom.xml文件肯定有问题,但这里列出了log4j文件。如果你愿意,请详细说明这一点?我已经阅读了maven dependency plugin usage页面,并且相信我正确地使用了它,所以问题一定是我如何在pom文件中将log4j作为插件列出。
This plugin provides the capability to package the artifact in an uber-jar,
including its dependencies and to shade -
i.e. rename - the packages of some of the dependencies.
mvn package