Apache Maven项目提供的Maven插件Assembly能够将Maven应用的输出及其依赖库整合打包为一个压缩包,以便于应用的分发使用。
Assembly插件的最新版本是2017.8.13发布的3.1.0。
需要说明的是,Assembly插件只能原样打包,将各种依赖库打包在一起。而如果在打包过程中要解决冲突,或者在打包过程中进行某些转换,如剔除License重复等,则需要借助于一个更强大的Maven Shade插件。
1. Assembly插件的goals
- single
- help
2. Assembly插件在Maven应用中的基本使用步骤
1) 编辑应用的定制assembly descriptor(通常不必要,可以使用Assembly插件提供的预定义descriptor文件,详见下文)
src/assembly/src.xml
2) 编辑应用的pom.xml,配置插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
</plugin>
3) 执行命令
mvn assembly:single
3. Assembly插件的4个预定义的descriptor文件
- jar-with-dependencies
- src
- bin
- project
4. 使用Assembly插件预定义的jar-with-dependencies文件
<plugin>
<!-- groupId is not required, because the group is
org.apache.maven.plugins ...which is assumed by default.
-->
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<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>
后续可以直接执行mvn package,这也是最常见的Assembly插件配置方式。
6. 在Maven应用中同时设置多个descriptor文件
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptors>
<descriptor>src/assembly/src.xml</descriptor>
</descriptors>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<plugin>
这里,配置了标准的jar-with-dependencies和定制的文件src.xml(定制文件详见
Assembly Examples)。
7. 创建可执行的jar
即通过pom.xml设置jar文件中的mainClass
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>org.sample.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
参考链接:
https://maven.apache.org/plugins/maven-assembly-plugin/index.html