如果你需要将maven构建的项目打包成可执行jar且包含所有依赖,Assembly插件可以帮助你实现这个需求。
1. Assembly插件简介
Assembly插件的两个主要目标:
-
assembly:assembly
被设计成直接从命令行调用,它永远不应该绑定到生命周期阶段。目标是一个聚合mojo。 -
single mojo
被设计成作为你每日构建的一部分,应该被绑定到项目生命周期的某个阶段。
Assembly插件为一些常用的归档类型提供了内置的描述符:
- bin
不是本文重点,省略... - jar-with-dependencies
jar-with-dependencies描述符构建一个带有主项目jar文件和所有项目运行时依赖未解开内容的JAR归档文件。外加上适当的Main-Class Manifest条目,该描述符可以为你的项目生成一个自包含的,可运行的jar,即使该项目含有依赖。 - project
不是本文重点,省略... - src
不是本文重点,省略...
2. 创建一个自包含的可执行jar
pom.xml中添加如下assembly插件配置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hello world</name>
<description>hello world</description>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-2</version>
<executions>
<execution>
<id>create-executable-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.helloworld.Main</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
执行mvn package后,将会得到一个可执行jar。
参考资料
- Maven权威指南中文版