当项目中对打包有一些特殊需求时,比如想打包成zip或tar.gz格式的包时,可以使用maven-assembly-plugin插件来实现自定义打包输出路径及一系列特定需求。
本文将会对该插件的常见使用方式及各标签作一些详细的介绍,更为细致的需求请自行访问该插件官网:http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
1、pom文件中配置该插件,如下图:
<build>
<plugins>
<plugin>
<!-- 配置插件坐标 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<!-- 配置执行器 -->
<executions>
<execution>
<!-- 名称随意,最好与描述文件中的id一致,不一致也无所谓,只要文件路径写对也能找到 -->
<id>build-bin</id>
<!-- 绑定到package生命周期阶段上,该标签决定了该插件的作用 -->
<phase>package</phase>
<goals>
<!-- 只运行一次 -->
<goal>single</goal>
</goals>
<configuration>
<tarLongFileMode>gnu</tarLongFileMode>
<descriptors>
<!-- 配置描述文件路径,一般使用相对目录即可 -->
<descriptor>assembly.xml</descriptor>
</descriptors>
<outputDirectory>target</outputDirectory>
<!-- 自定义输出包的名称 -->
<finalName>platform-notify</finalName>
<!-- 该标签默认为true,指定为false后包名将不会自动带上描述文件的id -->
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
2、描述文件的详细信息如下图,完整版:
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<!-- 描述文件的id -->
<id>build-bin</id>
<!-- 是否生成和压缩包同名的项目跟目录 -->
<includeBaseDirectory>true</includeBaseDirectory>
<!-- 指定程序集格式 -->
<formats>
<format>dir</format>
<format>tar.gz</format>
</formats>
<!-- 用于执行排除或包含某些依赖的操作,一般打包需求时往往不需要配置该标签 -->
<dependencySets>
<dependencySet>
<!-- 该标签默认为true,改为false之后将不会新建文件夹 -->
<useProjectArtifact>false</useProjectArtifact>
<!-- 文件的输出路径 -->
<outputDirectory>.</outputDirectory>
<!-- 包含该依赖 -->
<includes>
<include>uyun.soft:util-shell:tar.gz</include>
</includes>
<!-- 默认为false,改为true之后表示解压上面的依赖 -->
<unpack>true</unpack>
<!-- 默认即为runtime -->
<scope>runtime</scope>
<!-- 文件权限 读权限为4;写权限为2;执行权限为1;第一位7表示文件所有者所拥有的权限;第二位5表示文件所有者同组用户所拥有的权限;
第三位5表示公共用户所拥有的权限-->
<fileMode>0755</fileMode>
</dependencySet>
</dependencySets>
<fileSets>
<!-- 这里就是自定义各文件的输出路径 -->
<fileSet>
<!-- 文件所在项目中的目录,相对于该描述文件的路径 -->
<directory>../core/target/classes</directory>
<!-- 打包后的生成路径,若不存在会直接创建 -->
<outputDirectory>resources/notify/spring-conf</outputDirectory>
<!-- 目录下特定的文件 可模糊匹配也可特定 -->
<includes>
<include>application.yaml</include>
<include>spring-context.xml</include>
<include>spring-dubbo.xml</include>
</includes>
<!-- 文件权限 -->
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>../core/target/classes/database</directory>
<outputDirectory>resources/notify/database</outputDirectory>
<includes>
<include>*.sql</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>../core/target</directory>
<outputDirectory>resources/notify/lib</outputDirectory>
<includes>
<include>**/*.jar</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>..</directory>
<outputDirectory>resources/notify/</outputDirectory>
<lineEnding>unix</lineEnding>
<includes>
<include>module.yaml</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>../conf/disconf</directory>
<outputDirectory>resources/notify/conf</outputDirectory>
<includes>
<include>platform-notify.properties</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>resources</directory>
<outputDirectory>resources/notify/bin</outputDirectory>
<includes>
<include>test_send.sh</include>
<include>platform-notify.sh</include>
<include>set-env.sh</include>
</includes>
<!-- 指定行尾 unix的结束行尾一般为换行符即\n,windows等与之相对应的则为回车符\d -->
<lineEnding>unix</lineEnding>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>resources</directory>
<outputDirectory>.</outputDirectory>
<includes>
<include>install.sh</include>
</includes>
<lineEnding>unix</lineEnding>
<fileMode>0755</fileMode>
</fileSet>
</fileSets>
</assembly>
当项目中存在多个微服务进程模块时,可分别配置该xml统一每个进程的打包方式,方便使用自动化工具来进行统一的管理和部署工作。