之前记录了maven:jar、dependency打包插件简记,这里再记录一下 maven-assembly打包插件的使用,方便日后回顾和查阅。
maven-assembly-plugin
assembly 也是 maven 下的一个打包插件,其可以将项目里的资源按照相应的配置(需要配置相应的 descriptor 描述文件)打包成一个包(支持 zip、jar、tar、tar.gz、tar.bz2包),其 pom 的配置和解释如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <useUniqueVersions>false</useUniqueVersions> <mainClass>com.chifuyong.TestDemo</mainClass> <addClasspath>true</addClasspath> <classpathPrefix>dependencies/</classpathPrefix> </manifest> </archive> </configuration> </plugin>
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>assembly-test</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <finalName>${project.artifactId}</finalName> <descriptors> <descriptor>assemblies/assembly.xml</descriptor> </descriptors> </configuration> </execution> </executions> </plugin>
|
这里使用了 jar-plugin 来将项目打包成可执行 Jar,再通过 pom.xml 下的 <descriptor> 标签配置的描述文件 ,对项目里的资源进行整合打包成一个包文件,此次示例中用到的描述文件为:assemblies/assembly.xml ,其具体配置和解释如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| <id>${project.version}</id> <formats> <format>tar.gz</format> </formats>
<includeBaseDirectory>true</includeBaseDirectory>
<files> <file> <source>${project.build.directory}/${project.artifactId}-${project.version}.jar</source> <outputDirectory>/</outputDirectory> <destName>maven-plugin-example.jar</destName> </file> </files>
<fileSets> <fileSet> <directory>${project.basedir}/src/main/resources/bin</directory> <outputDirectory>/</outputDirectory> </fileSet> <fileSet> <directory>${project.basedir}/src/main/resources/config/${profile.env}</directory> <outputDirectory>/conf</outputDirectory> <includes> <include>*.xml</include> </includes> </fileSet> </fileSets>
<dependencySets> <dependencySet> <outputDirectory>/lib</outputDirectory> <unpack>false</unpack> <useProjectArtifact>false</useProjectArtifact> <scope>runtime</scope> </dependencySet> </dependencySets> </assembly>
|
mvn:package 之后,打包后的会生成一个 *.tar.gz 文件,这个包里的文件就是按照描述里的配置而打包出来的,具体内容如下:


默认的话 assembly 也有四个内置的 assembly descriptor 可以使用,在 maven-assembly-plugin.3.2.0.jar 下可以看到,相应的描述文件及其作用,如下图 bin.xml、jar-with-dependencies.xml 、src.xml、project.xml 都是其内置的描述文件,可以点击查看其相应的配置。

如果想用内置描述文件进行打包也可以,这里用 jar-with-dependencies.xml (将项目代码和其所依赖的所有 jar 都打包到一个 jar 里)这个内置描述文件做例子,其配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.2.0</version> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.chifuyong.TestDemo</mainClass> </manifest> </archive> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
|
打包后的 jar 进行反编译,内容如下:
