Maven assembly plugin

1. wiki

由 pom.xml 和 assembly.xml 组成,前者声明插件,后者是具体执行配置

2. pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<finalName>${project.name}</finalName>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor><!-- 打包配置文件路径 -->
</descriptors>
<!-- 非必须,打包后文件夹命名为 finalName-id -->
<finalName>outter</finalName>
</configuration>
<!-- 配置执行器 -->
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase><!-- 绑定到 package 生命周期阶段上 -->
<goals>
<goal>single</goal><!-- 只运行一次 -->
</goals>
</execution>
</executions>
</plugin>

3. assembly.xml 打包配置文件

其中可以使用 pom.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd
http://maven.apache.org/ASSEMBLY/2.0.0 ">

<!-- 唯一ID,这里指定的是项目环境 -->
<id>${profileActive}-${project.version}</id>

<!-- 打包的类型,允许同时有多个 -->
<formats>
<format>tar.gz</format>
<!--
<format>dir</format>
<format>zip</format>
-->
</formats>

<!-- 是否添加一层 pom.xml 中配置的 finalName 文件夹,默认名是 artifactId-version -->
<includeBaseDirectory>true</includeBaseDirectory>

<!--针对多个文件-->
<fileSets>
<!-- 将src/bin目录下的所有文件输出到打包后的bin目录中 -->
<fileSet>
<!-- ${basedir}:maven 预置变量,项目文件夹地址 -->
<directory>${basedir}/src/bin</directory>
<outputDirectory>bin</outputDirectory><!-- 输出目录 -->
<fileMode>0755</fileMode><!-- 权限 -->
<includes><!-- 包括的文件 -->
<include>*.sh</include>
</includes>
<excludes><!-- 不包括的文件 -->
<exclude>*.no_need</exclude>
</excludes>
</fileSet>

<!-- 指定输出target/classes中的配置文件到config目录中 -->
<fileSet>
<directory>${basedir}/target/classes</directory>
<outputDirectory>config</outputDirectory>
<fileMode>0644</fileMode>
<includes>
<include>application.yml</include>
<include>application-${profileActive}.yml</include><!-- 使用 maven 中预置变量 -->
<include>mapper/**/*.xml</include>
<include>static/**</include>
<include>templates/**</include>
<include>*.xml</include>
<include>*.properties</include>
</includes>
</fileSet>

<!-- 将本项目打包中 -->
<fileSet>
<directory>${basedir}/target</directory>
<outputDirectory>libs/</outputDirectory>
<fileMode>0755</fileMode>
<includes>
<include>${artifactId}-${version}.jar</include>
</includes>
</fileSet>
</fileSets>

<!--针对单个文件-->
<files>
<file>
<!--源文件地址,相对于项目地址-->
<source>pom.xml</source>
<!--输出目录为projectName-assembly-version/-->
<outputDirectory>.</outputDirectory>
<!--文件的权限-->
<fileMode>0755</fileMode>
<!--重命名为-->
<destName>pom.xml</destName>
</file>
</files>

<!--依赖jar包以及项目打包文件存储文件-->
<dependencySets>
<dependencySet>
<!--存储在 lib 下-->
<outputDirectory>lib</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<scope>runtime</scope>
<excludes>
<exclude>log4j:log4j</exclude>
<exclude>org.slf4j:slf4j-log4j12</exclude>
</excludes>
</dependencySet>
</dependencySets>

</assembly>