总体介绍
assembly这个词,在这个插件里面我认为就可以翻译成:集合。
同时官网用一句话来介绍这个插件:
The Assembly Plugin for Maven is primarily intended to allow users to aggregate the project output along with its dependencies, modules, site documentation, and other files into a single distributable archive.
翻译过来就是:
Maven的Assembly Plugin主要用于允许用户将项目输出及其依赖项,模块,站点文档和其他文件聚合到一个可发行的存档中。
之前我们用的插件,打包的或者是打配置打依赖的,相对来说功能比较单一,而这个插件相对来说对于聚合文件来说是比较强大的,当然和其它插件是不冲突的,目的不同。
我的理解就是,它能够帮你把你这个工程所关联的任何你需要的内容以及本身全部打包到一个集合里面去,然后作为发行版,就能直接使用了。
我更喜欢用打包这个此,聚合可能更加专业以及准确。
上面有两个重点内容,关联的内容,集合。
拿我的需求来讲,我这边是写了一个客户端,我们想做了一个客户端的安装包,用户拿到以后直接解压,然后执行脚本,就能跑起来了。
所以我这边的目标集合就是一个zip包,关联的内容的话就是客户端所需要的内容:比如:依赖的jar包,启动的脚本,需要的中间件,相关的配置文件以及Jre等等。
根据自己的需求,明确这两个事情,然后就可以正确使用这个插件。
你有一堆文件,要搞到一个集合里面去,那就用这个插件就行了。
目标集合都有哪些呢?
目前支持:
zip
tar
tar.gz (or tgz)
tar.bz2 (or tbz2)
tar.snappy
tar.xz (or txz)
jar
dir
war
and any other format that the ArchiveManager has been configured for
我先暂时讲一下zip,毕竟我只用它了,后面要是用别的了,再详细讲述。
基本用法
在这个插件里面,一个目标集合的聚合过程是用一个描述文件(xml)来实现的,它可以有多个,所以重点就是这个xml的写法。
pom文件里面的配置比较简单。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<descriptors>
<descriptor>src/main/resources/descriptors.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
上面的写法是最常见的一种,生命周期和package绑在一块了,直接package也挺方便的。
关于描述文件的xml的用法,我贴一下官网的,挺多内容的,如果自己有一些特殊需求,这个还是很有用的,仔细看看,没准能找到自己想要的。
<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">
<id/>
<formats/>
<includeBaseDirectory/>
<baseDirectory/>
<includeSiteDirectory/>
<containerDescriptorHandlers>
<containerDescriptorHandler>
<handlerName/>
<configuration/>
</containerDescriptorHandler>
</containerDescriptorHandlers>
<moduleSets>
<moduleSet>
<useAllReactorProjects/>
<includeSubModules/>
<includes/>
<excludes/>
<sources>
<useDefaultExcludes/>
<outputDirectory/>
<includes/>
<excludes/>
<fileMode/>