2019独角兽企业重金招聘Python工程师标准>>>
Assembly插件主要是聚合项目的输出,比如依赖,模块以及其他文件。通俗的来说,就是将项目内容按照一定规则及指定格式重新组合并输出。它支持的输出格式有多种:
- jar jar包
- war war包
- dir 文件目录
- zip zip压缩包
- tar tar压缩包
- tar.gz
- tar.bz2
- tar.xz
为什么需要Assembly插件呢?因为对于服务类型的后台程序,线上运行时一般通过脚本的方式启动和停止,而项目中的目录结构复杂且不够直观,且项目文件也需要合并和过滤,Assembly插件就可以帮助我们完成。
Assembly使用
使用Assembly插件需要在pom.xml中加入以下配置
maven-assembly-plugin
3.1.0
src/main/assembly/assembly.xml
make-assembly
package
single
Assembly插件一般绑定的阶段为package,主要的插件目标就是assembly:single。在
现在我们的项目目录如下
+ src
+ main
+ java
+ resources
+ jdbc.properties
+ bin
+ start.sh
+ stop.sh
+ assembly
+ assembly.xml
最终我们想要生成的目录如下
+ bin
start.sh
stop.sh
+ conf
jdbc.properties
+ lib(依赖jar包目录)
xxx.jar
同时希望能输出成zip格式,那么assembly.xml的配置如下
distribution
jar
zip
src/main/bin
bin
src/main/resources
conf
true
true
lib
runtime
命令行执行
mvn clean package
项目的target目录下会生成两个文件
- xxx-distribution.jar
- xxx-distribution.zip
xxx是项目的finalName-version,而distribution后缀是默认加上assembly.xml中的id,如果不想要这个后缀,可以在pom.xml的插件的
false
src/main/assembly/assembly.xml
如果有另外的变量属性文件,也可以在
false
src/main/filter/filter.properties
src/main/assembly/assembly.xml
assembly.xml中的更多配置见http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
pom文件中插件的更多配置见http://maven.apache.org/plugins/maven-assembly-plugin/single-mojo.html
includes/excludes
在
src/main/resources
conf
true
some/path1
src/main/resources
conf
false
some/path2
第一个
创建可执行的jar
默认情况下,通过mvn package生成的jar包中因为没有指定Main-Class属性,因此并不能使用-jar配置直接运行。Assembly插件支持
com.lcifn.maven.Application
再执行命令
mvn clean package
新生成的jar包中的META-INF/MANIFEST.MF中就包含了Main-Class属性
使用containerDescriptorHandlers合并文件
Assembly插件支持常用的文件合并功能,特别是META-INF下的services文件或spirng文件(spring.handlers和spring.schemas)。
metaInf-services
聚合所有的META-INF/services文件合并成一个文件
....
metaInf-services
metaInf-spring
聚合所有的**META-INF/spring.**文件合并成一个文件
....
metaInf-spring
file-aggregator
也可以给定正则表达式匹配文件合并成一个文件,以下匹配所有file.txt然后合并成一个file.txt
....
file-aggregator
.*/file.txt
file.txt
参考文档:
- http://maven.apache.org/plugins/maven-assembly-plugin/index.html