如何使用 Maven 创建具有依赖项的可执行 JAR?
2022-08-31 01:22:13
我想将我的项目打包在单个可执行JAR中以进行分发。
如何将 Maven 项目将所有依赖项 JAR 打包到我的输出 JAR 中?
我想将我的项目打包在单个可执行JAR中以进行分发。
如何将 Maven 项目将所有依赖项 JAR 打包到我的输出 JAR 中?
<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>
并且你运行它
mvn clean compile assembly:single
编译目标应该在 assembly:single 之前添加,否则不包括你自己项目的代码。
在注释中查看更多详细信息。
通常,此目标与生成阶段相关联以自动执行。这可确保在执行或执行部署/发布时构建 JAR。mvn install
<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>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
您可以使用依赖插件在包阶段之前的单独目录中生成所有依赖关系,然后将其包含在清单的类路径中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>theMainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
或者,使用 As OutputDirectory 将所有 JAR 文件集成到主 JAR 文件中,但随后您需要添加自定义类加载代码来加载 JAR 文件。${project.build.directory}/classes/lib