我有一个只有一个依赖项的简单Maven项目。我可以安装它并通过Exec Maven Plugin在命令行中运行它:
mvn exec:java -D"exec.mainClass"="com.MyClass"
打包后,maven在我的目录中生成一个.jar文件。在Maven JAR Plugin的帮助下,我明确了自己的main
方法类。看起来像:
...
Created-By: Apache Maven 3.3.1
Build-Jdk: 1.8.0_66
Main-Class: com.MyClass
现在,我想使用java
命令像常规Java可执行文件一样运行此.jar文件,但是在执行以下操作之后:
java -jar myFile.jar
它给出了关于我唯一的依赖项的错误java.lang.NoClassDefFoundError
。
如何使Maven将所有依赖项添加到我的可执行jar文件中?
答案 0 :(得分:1)
您可以使用Apache Maven Assembly Plugin来创建具有所有依赖项的jar,因此pom.xml应该类似于以下内容:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>mypackage.myclass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
我希望它能帮助您,再见。
答案 1 :(得分:1)
一种实现此目标的方法是使用Apache Maven Shade Plugin:
此插件提供了将工件打包到 uber-jar,包括其依赖性和阴影-即重命名- 一些依赖项的软件包。
对于具有许多依赖项的大型项目,此插件具有一些优点。此处对此进行了说明:Difference between maven plugins ( assembly-plugins , jar-plugins , shaded-plugins)
在我的项目中,我使用以下配置:
nullptr