Maven Assembly插件 使用与标签介绍

一、介绍

Assembly 插件的主要作用是,允许用户将项目输出与它的依赖项、模块、站点文档、和其他文件一起组装成一个可分发的归档文件。

二、常见的maven插件

plugin

function

maven-jar-plugin

maven 默认打包插件【springboot默认打包方式】,用来创建 project jar

maven-shade-plugin

用来打可执行包,executable(fat) jar

maven-assembly-plugin

支持定制化打包方式,例如 apache 项目的打包方式

三、使用

1.在pom.xml中引入assembly插件

2.创建assembly.xml

assembly.xml展示

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">

<!-- 编写自定义的assembly文件  -->

</assembly>

四、标签介绍

1.插件引入时的标签介绍

pom.xml

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.3.0</version>
    <executions><!-- 执行器 -->
        <execution>
            <id>make-assembly</id> <!--名字任意 -->   
            <phase>package</phase> <!-- 绑定到package生命周期阶段上 -->
            <goals>
                <goal>single</goal><!-- 只运行一次 -->
            </goals>
            <configuration>
                <finalName>xxx</finalName><!-- 文件名 -->
                <appendAssemblyId>{boolean}</appendAssemblyId><!-- true:finalName属性值作为打包文件的前缀,assembly文件中的id作为紧随其后的名称;false:不与id连用-->
                <descriptors> <!--描述文件路径-->  
                    <descriptor>src/main/resources/zip.xml</descriptor>  
                </descriptors>  
            </configuration>  
        </execution>
    </executions>
</plugin>

2.assembly.xml中的标签介绍

id

id 标识符,添加到生成文件名称的后缀符。如果指定 id 的话,目标文件则是 ${artifactId}-${id}.tar.gz

结构:

<id>xxx</id>
formats

支持的打包格式

结构:

<formats>
    <format>xxx</format>
</formats>

标签名

值类型

描述

format

String

支持的打包格式,有zip,tar,tar.gz(or tgz),tar.bz2(or tbz2),tar.snappy,tar.xz(or txz),jar,dir,war格式类型

includeBaseDirectory

默认为true。指定打的包是否包含打包层目录(比如finalName是prefix,当值为true,所有文件被放在包内的prefix目录下,否则直接放在包的根目录下。finalName标签在pom文件中注册插件里面的configuration标签下

结构:

<includeBaseDirectory>xxx</includeBaseDirectory>
baseDirectory

设置生成的程序集存档的基目录。 如果没有设置此参数,并且includeBaseDirectory == true,则${project.build. path (从2.2.1开始)

结构:

<baseDirectory>xxx</baseDirectory>
includeSiteDirectory

默认值:false。在最终的归档文件中包含一个站点目录。 项目的站点目录位置由程序集插件的siteDirectory参数确定

结构:

<includeSiteDirectory>xxxx</includeSiteDirectory>
containerDescriptorHandlers

常用的文件合并

结构:

<containerDescriptorHandlers>
    <containerDescriptorHandler>
      <handlerName/>
      <configuration/>
    </containerDescriptorHandler>
  </containerDescriptorHandlers>

标签名

值类型

描述

containerDescriptorHandler

List

为进入程序集存档的文件配置过滤器,以支持聚合各种类型的描述符片段,如components.xml、web.xml等。

handlerName

String

处理程序的plexus角色提示,用于从容器查找

configuration

DOM

处理程序的配置选项

提醒:configuration具体配置标签有哪些,官方暂没有提供,网络暂没有找到完整数据,故不展示

moduleSets

指定程序集中包含哪些模块文件。 moduleSet通过提供一个或多个子元素来指定

结构:

<moduleSets>
    <moduleSet>
        <useAllReactorProjects/>
        <includeSubModules/>
        <includes/>
        <excludes/>
        <sources>
            <useDefaultExcludes/>
            <outputDirectory/>
            <includes/>
            <excludes/>
            <fileMode/>
            <directoryMode/>
            <fileSets>
                <fileSet>
                    <useDefaultExcludes/>
                    <outputDirectory/>
                    <includes/>
                    <excludes/>
                    <fileMode/>
                    <directoryMode/>
                    <directory/>
                    <lineEnding/>
                    <filtered/>
                    <nonFilteredFileExtensions/>
                </fileSet>
            </fileSets>
            <includeModuleDirectory/>
            <excludeSubModuleDirectories/>
            <outputDirectoryMapping/>
        </sources>
        <binaries>
            <outputDirectory/>
            <includes/>
            <excludes/>
            <fileMode/>
            <directoryMode/>
            <attachmentClassifier/>
            <includeDependencies/>
            <dependencySets>
                <dependencySet>
                    <outputDirectory/>
                    <includes/>
                    <excludes/>
                    <fileMode/>
                    <directoryMode/>
                    <useStrictFiltering/>
                    <outputFileNameMapping/>
                    <unpack/>
                    <unpackOptions>
                        <includes/>
                        <excludes/>
                        <filtered/>
                        <nonFilteredFileExtensions/>
                        <lineEnding/>
                        <useDefaultExcludes/>
                        <encoding/>
                    </unpackOptions>
                    <scope/>
                    <useProjectArtifact/>
                    <useProjectAttachments/>
                    <useTransitiveDependencies/>
                    <useTransitiveFiltering/>
                </dependencySet>
            </dependencySets>
            <unpack/>
            <unpackOptions>
                <includes/>
                <excludes/>
                <filtered/>
                <nonFilteredFileExtensions/>
                <lineEnding/>
                <useDefaultExcludes/>
                <encoding/>
            </unpackOptions>
            <outputFileNameMapping/>
        </binaries>
    </moduleSet>
</moduleSets>

标签名

值类型

描述

moduleSet

ModuleSet

一个或多个项目存在于项目的pml .xml中。 这允许您包含属于项目的的源代码或二进制文件。

useAllReactorProjects

boolean

默认为false。为true,则该插件将包含当前反应器中用于处理的所有项目。 这些将受到包括/排除规则的约束(从2.2开始)

includeSubModules

boolean

默认true。如果设置为false,插件将从这个模块集的处理中排除子模块。 否则,它将处理所有子模块,每个子模块都要包含/排除规则。 (从2.2.1开始)

includes/include*

List

包含哪些

excludes/exclude*

List

排除哪些

source

ModuleSources

插件将在结果程序集中包含该集合中包含的模块的源文件

binaries

ModuleBinaries

插件将在结果程序集中包含该集合中包含的模块的二进制文件

source

包含用于在程序集中包含项目模块的源文件的配置选项。

标签名

值类型

描述

useDefaultExcludes

boolean

默认为true。在计算受此集合影响的文件时,是否应该使用标准排除模式,比如匹配CVS和Subversion元数据文件的那些模式。

outputDirectory

String

相对于程序集的根目录的根设置输出目录。 例如,“log”将把指定的文件放到log目录中。

includes/include*

List

包含哪些

excludes/exclude*

List

排除哪些

fileMode

String

默认值为0644。类似于UNIX权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(User)(Group)(Other),其中每个组件都是Read = 4, Write = 2, Execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他只读”。

directoryMode

String

默认值为0755。类似于UNIX权限,设置包含目录的目录模式。 这是一个八进制值。 格式:(User)(Group)(Other),其中每个组件都是Read = 4, Write = 2, Execute = 1的和。 例如,0755表示“用户读写”、“组”和“其他只读”。

fileSets/fileSet

List

指定要将每个包含模块中的哪些文件组包含在程序集中。 通过提供一个或多个子元素来指定文件集

includeModuleDirectory

boolean

默认值为true。指定是否应该将模块的finalName前缀到应用于它的任何文件集的outputDirectory值

excludeSubModuleDirectories

boolean

默认值为true。指定当前模块下的子模块目录是否应从应用于该模块的文件集中排除。 如果你只是想复制与这个ModuleSet匹配的模块列表的源代码,忽略(或单独处理)存在于当前目录下的模块,这可能是有用的。

outputDirectoryMapping

String

Default value is: ${module.artifactId}。设置此程序集中包含的所有模块基目录的映射模式。 注意:该字段仅在includeModuleDirectory == true时使用

binaries

包含用于在程序集中包含项目模块的二进制文件的配置选项

标签名

值类型

描述

outputDirectory

String

相对于程序集的根目录的根设置输出目录

includes/include*

List

包含哪些

excludes/exclude*

List

排除哪些

fileMode

String

默认值为0644。类似于UNIX权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(User)(Group)(Other),其中每个组件都是Read = 4, Write = 2, Execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他只读”。

directoryMode

String

默认值为0755。类似于UNIX权限,设置包含目录的目录模式。 这是一个八进制值。 格式:(User)(Group)(Other),其中每个组件都是Read = 4, Write = 2, Execute = 1的和。 例如,0755表示“用户读写”、“组”和“其他只读”。

attachmentClassifier

String

当指定时,attachmentClassifier将导致组装人员查看附加到模块的工件,而不是主项目工件。 如果它能找到匹配指定分类器的附加工件,它将使用它; 否则,它将抛出异常

includeDependencies

boolean

默认值为true。如果设置为true,插件将包含这里包含的项目模块的直接和过渡依赖关系。 否则,它将只包含模块包。

dependencySets/dependencySet

List

指定要包含在程序集中的模块的哪些依赖项。 dependencySet可以通过提供一个或多个子元素来指定

unpack

boolean

默认值为true。如果设置为true,此属性将把所有模块包解压到指定的输出目录。 当设置为false时,模块包将作为存档文件(jar)包含。

unpackOptions

UnpackOptions

允许对从模块工件解包的项指定包含和排除,以及过滤选项

outputFileNameMapping

String

设置此程序集中包含的所有非UNPACKED依赖关系的映射模式。(由于2.2-beta-2; 2.2-beta-1使用${artifactId} - ${version} ${dashClassifier?}${extension}作为默认值)注意:如果dependencySet指定unpack == true,则outputFileNameMapping将不要使用; 在这些情况下,使用outputDirectory。有关可用于outputFileNameMapping参数的条目的更多详细信息,请参阅插件FAQ。默认值是:${module.artifactId} - ${module.version} ${dashClassifier?}.${module.extension}。

unpackOptions

指定包含/排除/过滤从存档中提取的项的选项

标签名

值类型

描述

includes/include*

List

包含哪些

excludes/exclude*

List

排除哪些

filtered

boolean

默认值为false。是否使用构建配置中的属性,在文件从归档文件解压缩时过滤文件中的符号

nonFilteredFileExtensions/nonFilteredFileExtension*

List

附加的文件扩展名不应用过滤

lineEnding

String

设置文件的行结束符。 (从2.2开始)有效值:“keep” -保留所有行尾; “unix” -使用unix风格的行结束符 ;“lf” -使用单行换行结束符 ;“dos” -使用dos风格的行结尾 ;“crlf” -使用回车,换行

useDefaultExcludes

boolean

默认值为true。在计算受此集合影响的文件时,是否应该使用标准排除模式,比如匹配CVS和Subversion元数据文件的那些模式。 对于向后兼容性,默认值为true。

encoding

String

允许指定在解压缩存档时使用的编码,对于支持指定编码的解压缩存档。 如果未指定,将使用archiver默认值。 归档文件默认值通常表示正常(现代)的值。

fileSets

管理一组文件的存放位置

结构:

<fileSets>
    <fileSet>
        <useDefaultExcludes/>
        <outputDirectory/>
        <includes/>
        <excludes/>
        <fileMode/>
        <directoryMode/>
        <directory/>
        <lineEnding/>
        <filtered/>
        <nonFilteredFileExtensions/>
    </fileSet>
</fileSets>

标签名

值类型

描述

useDefaultExcludes

boolean

默认值为true。在计算受此集合影响的文件时,是否应该使用标准排除模式,比如匹配CVS和Subversion元数据文件的那些模式。 对于向后兼容性,默认值为true。

outputDirectory

String

指定文件集合的输出目录,该目录是相对于根目录

includes/include*

List

包含文件

excludes/exclude*

List

排除文件

fileMode

String

默认值为0644。类似于UNIX权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(User)(Group)(Other),其中每个组件都是Read = 4, Write = 2, Execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他“只读。

directoryMode

String

默认值为0755。类似于UNIX权限,设置包含目录的目录模式。 这是一个八进制值。 格式:(User)(Group)(Other),其中每个组件都是Read = 4, Write = 2, Execute = 1的和。 例如,0755表示“用户读写”、“组”和“其他”只读。

directory

String

设置模块目录中的绝对或相对位置。 例如,"src/main/bin"会选择定义依赖项的项目的这个子目录

lineEnding

String

设置文件的行结束符。 (从2.2开始)有效值:“keep” -保留所有行尾; “unix” -使用unix风格的行结束符 ;“lf” -使用单行换行结束符 ;“dos” -使用dos风格的行结尾 ;“crlf” -使用回车,换行

filtered

boolean

默认值为false。是否使用构建配置中的属性在复制文件时过滤符号

nonFilteredFileExtensions/nonFilteredFileExtension*

List

附加的文件扩展名不应用过滤

files

可以指定目的文件名到指定目录,其他和 fileSets 相同

结构:

<files>
    <file>
        <source/>
        <sources/>
        <outputDirectory/>
        <destName/>
        <fileMode/>
        <lineEnding/>
        <filtered/>
    </file>
</files>

标签名

值类型

描述

source

String

源文件,相对路径或绝对路径

sources/source*

List

组合并包含在程序集中的模块文件目录中的绝对或相对路径集

outputDirectory

String

输出目录

destName

String

设置目标文件名。 Default与源文件的名称相同

fileMode

String

默认值为0644。类似于UNIX权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(User)(Group)(Other),其中每个组件都是Read = 4, Write = 2, Execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他只读”。

lineEnding

String

设置文件的行结束符。 (从2.2开始)有效值:“keep” -保留所有行尾; “unix” -使用unix风格的行结束符 ;“lf” -使用单行换行结束符 ;“dos” -使用dos风格的行结尾 ;“crlf” -使用回车,换行

filtered

boolean

设置是否过滤文件

dependencySets

用来定制工程依赖 jar 包的打包方式

结构:

<dependencySets>
    <dependencySet>
        <outputDirectory/>
        <includes/>
        <excludes/>
        <fileMode/>
        <directoryMode/>
        <useStrictFiltering/>
        <outputFileNameMapping/>
        <unpack/>
        <unpackOptions>
            <includes/>
            <excludes/>
            <filtered/>
            <nonFilteredFileExtensions/>
            <lineEnding/>
            <useDefaultExcludes/>
            <encoding/>
        </unpackOptions>
        <scope/>
        <useProjectArtifact/>
        <useProjectAttachments/>
        <useTransitiveDependencies/>
        <useTransitiveFiltering/>
    </dependencySet>
</dependencySets>

标签名

值类型

描述

outputDirectory

String

指定包依赖目录,该目录是相对于根目录

includes/include*

List

包含依赖

excludes/exclude*

List

排除依赖

fileMode

String

默认值为0644。类似于UNIX权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(User)(Group)(Other),其中每个组件都是Read = 4, Write = 2, Execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他只读”。

directoryMode

String

设置文件的行结束符。 (从2.2开始)有效值:“keep” -保留所有行尾; “unix” -使用unix风格的行结束符 ;“lf” -使用单行换行结束符 ;“dos” -使用dos风格的行结尾 ;“crlf” -使用回车,换行

useStrictFiltering

boolean

默认值为true。如果指定为true,那么在程序集创建过程中任何用于过滤实际构件的包含/排除模式都将导致构建失败,并显示错误。这是为了强调过时的包含或排除,或者表示程序集描述符配置不正确。(从2.2开始)

outputFileNameMapping

String

设置此程序集中包含的所有非UNPACKED依赖关系的映射模式。(由于2.2-beta-2; 2.2-beta-1使用${artifactId} - ${version} ${dashClassifier?}${extension}作为默认值)注意:如果dependencySet指定unpack == true,则outputFileNameMapping将不要使用; 在这些情况下,使用outputDirectory。有关可用于outputFileNameMapping参数的条目的更多详细信息,请参阅插件FAQ。默认值是:${module.artifactId} - ${module.version} ${dashClassifier?}.${module.extension}。

unpack

boolean

默认为false。如果设置为true,此属性将把所有依赖项解压缩到指定的输出目录中。 当设置为false时,依赖项将被包含为存档(jar)。 只能解压jar, zip, tar.gz和tar.gz。 bz。

unpackOptions

UnpackOptions

允许对从依赖项工件解包的项指定包含和排除,以及过滤选项。

scope

String

默认为runtime。设置这个dependencySet的依赖范围

useProjectArtifact

boolean

默认为true。确定当前项目生成期间生成的工件是否应包含在此依赖项集中

useProjectAttachments

boolean

默认为false。确定是否应将当前项目生成期间产生的附加构件包括在此依赖项集中

useTransitiveDependencies

boolean

默认为true。确定是否将传递依赖项包含在当前依赖项集的处理中。 如果为真,包含/排除/useTransitiveFiltering将应用于除了主项目依赖工件之外的可传递依赖工件。 如果为false, useTransitiveFiltering是无意义的,并且包含/排除只会影响项目的直接依赖关系

useTransitiveFiltering

boolean

默认为false。确定此依赖项集中的包含/排除模式是否将应用于给定工件的传递路径。 如果为真,并且当前工件是由另一个匹配包含或排除模式的工件引入的传递依赖项,那么当前工件也将应用相同的包含/排除逻辑。 默认情况下,该值为false,以保持与版本2.1的向后兼容性。 这意味着包含/排除只直接应用于当前工件,而不应用于引入它的工件的传递集。

repositories

指定程序集中包含哪些存储库文件。 通过提供一个或多个子元素来指定存储库

结构:

<repositories>
    <repository>
        <outputDirectory/>
        <includes/>
        <excludes/>
        <fileMode/>
        <directoryMode/>
        <includeMetadata/>
        <groupVersionAlignments>
            <groupVersionAlignment>
                <id/>
                <version/>
                <excludes/>
            </groupVersionAlignment>
        </groupVersionAlignments>
        <scope/>
    </repository>
</repositories>
repository

定义要包含在程序集中的Maven存储库。 可以包含在存储库中的构件是项目的依赖构件。 创建的存储库包含所需的元数据条目,还包含sha1和md5校验和。 这对于创建将部署到内部存储库的存档非常有用。

注意:目前,只允许来自中央存储库的工件。

标签名

值类型

描述

outputDirectory

String

指定包依赖目录,该目录是相对于根目录

includes/include*

List

当出现子元素时,它们定义一组要包含的工件坐标。 如果不存在,则<包括>表示所有有效值。 工件坐标可以以简单的groupId:artifactId形式给出,也可以以groupId:artifactId:type[:classifier]:version形式完全限定。 此外,还可以使用通配符,如*:maven-*

excludes/exclude*

List

当出现子元素时,它们定义一组要排除的依赖构件坐标。 如果不存在任何排除,则<排除>表示没有排除。 工件坐标可以以简单的groupId:artifactId形式给出,也可以以groupId:artifactId:type[:classifier]:version形式完全限定。 此外,还可以使用通配符,如*:maven-*

fileMode

String

默认值为0644。类似于UNIX权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(User)(Group)(Other),其中每个组件都是Read = 4, Write = 2, Execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他只读”。

directoryMode

String

设置文件的行结束符。 (从2.2开始)有效值:“keep” -保留所有行尾; “unix” -使用unix风格的行结束符 ;“lf” -使用单行换行结束符 ;“dos” -使用dos风格的行结尾 ;“crlf” -使用回车,换行

includeMetadata

boolean

默认为true。如果设置为true,该属性将触发存储库元数据的创建,从而允许将存储库用作功能性远程存储库。

groupVersionAlignments

List

指定要将一组工件与指定的版本保持一致。 通过提供一个或多个子元素来指定groupVersionAlignment。

scope

String

默认为runtime。指定此存储库中包含的工件的范围

groupVersionAlignment

允许一组工件与指定的版本对齐

标签名

值类型

描述

id

String

您希望为其对齐版本的工件的groupId

version

String

要将此组对齐到的版本

excludes/exclude*

List

当出现子元素时,它们定义要排除的工件的artifactid。 如果不存在任何排除,则<排除>表示没有排除。 通过提供一个或多个子元素来指定排除

componentDescriptors

指定要包含在程序集中的共享组件xml文件位置。 指定的位置必须相对于描述符的基位置。 如果描述符是通过类路径中的元素找到的,那么它指定的任何组件也会在类路径中找到。 如果它是通过元素的路径名找到的,这里的值将被解释为相对于项目basedir的路径。 当找到多个componentDescriptors时,它们的内容将被合并。 查看描述符组件以了解更多信息。 componentDescriptor是通过提供一个或多个子元素来指定的