前言
Maven-assembly-plugin是maven中针对打包任务而提供的标准插件,可以实现自定义打包。主要提供如下功能:
- 提供一个把工程依赖元素、模块、网站文档等其他文件存放到单个归档文件里。
- 打包成指定格式分发包,支持各种主流的格式如zip、tar.gz、jar和war等,具体打包哪些文件是高度可控的。
- 能够自定义包含/排除指定的目录或文件。
个人理解:
Maven-assembly-plugin只是一个自定义的打包插件,本身不编译工程,工程的编译还是依赖于maven默认绑定插件中的maven-compiler-plugin来完成的。
使用步骤
- 工程的pom.xml里配置Assembly插件。
- 需要指定一个Assembly描述符文件,该文件指定了打包格式,包含的文件/过滤的文件等信息,可以同时指定多个描述符文件,打包成不同的格式;
使用 descriptors,指定打包文件 src/assembly/src.xml,在该配置文件内指定打包操作。最终在pom.xml中的配置形如:
![](https://i-blog.csdnimg.cn/blog_migrate/8f9ffb4304d3c6d2a27b5245b3d8b04b.png)
描述符文件元素
id
<id>release</id>
id 标识符,添加到生成文件名称的后缀符。如果指定 id 的话,目标文件则是 ${artifactId}-${id}.tar.gz
formats
maven-assembly-plugin 支持的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war,可以同时指定多个打包格式
<formats>
<format>tar.gz</format>
<format>dir</format>
</formats>
dependencySets
用来定制工程依赖 jar 包的打包方式,核心元素如下表所示。
元素
|
类型
|
作用
|
outputDirectory
|
String
|
指定包依赖目录,该目录是相对于根目录
|
includes/include*
|
List<String>
|
包含依赖
|
excludes/exclude*
|
List<String>
|
排除依赖
|
<dependencySets>
<dependencySet>
<outputDirectory>/lib</outputDirectory>
</dependencySet>
</dependencySets>
fileSets
管理一组文件的存放位置,核心元素如下表所示。
元素
|
类型
|
作用
|
outputDirectory
|
String
|
指定文件集合的输出目录,该目录是相对于根目录
|
includes/include*
|
List<String>
|
包含文件
|
excludes/exclude*
|
List<String>
|
排除文件
|
fileMode
|
String
|
指定文件属性,使用八进制表达,分别为(User)(Group)(Other)所属属性,默认为 0644
|
<fileSets>
<fileSet>
<includes>
<include>bin/**</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<includes>
<include>/conf/**</include>
<include>logs</include>
</includes>
</fileSet>
</fileSets>
files
可以指定目的文件名到指定目录,其他和 fileSets 相同,核心元素如下表所示。
元素
|
类型
|
作用
|
source
|
String
|
源文件,相对路径或绝对路径
|
outputDirectory
|
String
|
输出目录
|
destName
|
String
|
目标文件名
|
fileMode
|
String
|
设置文件 UNIX 属性
|
<files>
<file>
<source>README.txt</source>
<outputDirectory>/</outputDirectory>
</file>
</files>
==========================================================
*******************
Maven-assembly-plugin配置示例
*********************
==========================================================
需求:目前公司有三个环境:测试、预发、生产,每个环境有各自不同的配置,在没使用Maven-assembly-plugin自定义打包之前,发到不同环境的项目需要手动修改配置,这样容易改漏,一改漏必然会导致严重的问题,所以我们引入Maven-assembly-plugin自定义打多个包,每个包使用不同环境的配置文件,发版时只需要将对应环境的包发上去解压即可。
java工程自定义打包示例
示例项目使用的是wenwo-platform-customer
根目录下存放的是测试环境的配置文件,pre对应预发配置文件,pro对应生产配置文件
1.建立不同环境的配置文件夹
在配置文件根目录下建立不同环境的配置文件夹,配置文件根目录为src/main/resources,在当前目录下建立pre,pro文件夹
![](https://i-blog.csdnimg.cn/blog_migrate/18c9be7d6df1500a7f82a214c24bcbec.png)
2.复制差异文件并修改
将有不同环境下不同配置的文件复制到pre,pro目录下,并将配置文件修改为相应环境下的配置
![](https://i-blog.csdnimg.cn/blog_migrate/5250cea90c5ccfdf829fed2398923d86.png)
这里仅给出其中一处配置修改的示例:
比如mongo连接配置,不同环境的连接端口不通,从左到右以此是测试、预发、生产的配置,它们分别位于src/main/resources、src/main/resources/pre、src/main/resources/pro目录下
![](https://i-blog.csdnimg.cn/blog_migrate/c1fcb441c4ebff432ef0101bd480472c.png)
3.建立assembly文件
在src/main目录下建立assembly文件夹,用来存放Assembly描述符文件
![](https://i-blog.csdnimg.cn/blog_migrate/1f5597dda6c074d163d3e739c19406d6.png)
分别建立assembly.xml、assembly-pre.xml、assembly-pro.xml文件
assembly.xml文件内容如下:
![](https://i-blog.csdnimg.cn/blog_migrate/30b97e96be2bee439caa0e14396699b2.png)
assembly-pre.xml文件内容如下:
关键配置已在图中通过备注标记出来了
![](https://i-blog.csdnimg.cn/blog_migrate/dab7bbda61d3e454d5d4b161c2f90755.png)
assembly-pro.xml的配置同理,这里就不贴出来了。这里主要通过备注解析一些关键配置,备注只会说明配置的主要功能,具体的详细说明及更多使用详见上面的“描述符文件元素”
4.pom.xml种配置assembly插件
在pom.xml的<build><plugins>的标签下添加如下配置:
![](https://i-blog.csdnimg.cn/blog_migrate/1125bcf48812ee9d0ec48a6a26aa347a.png)
web工程自定义打包示例
web工程的自定义打包同上,这里仅有assembly描述文件不同,同时只需要建立assembly-pre.xml和assembly-pro.xml描述文件。因为执行maven build时会自动执行默认绑定的plugin,java项目会执行maven-jar-plugin打一个jar包,而web项目会执行maven-war-plugin打一个war包,所以测试的war包不需要额外打。
![](https://i-blog.csdnimg.cn/blog_migrate/fdf7c467518395cdda4b4b301ce2416d.png)