当前位置: 代码网 > it编程>编程语言>Java > Maven Assembly插件使用与标签详解

Maven Assembly插件使用与标签详解

2026年03月06日 Java 我要评论
一、介绍assembly 插件的主要作用是,允许用户将项目输出与它的依赖项、模块、站点文档、和其他文件一起组装成一个可分发的归档文件。二、常见的maven插件pluginfunctionmaven-j

一、介绍

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

二、常见的maven插件

pluginfunction
maven-jar-pluginmaven 默认打包插件【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>
标签名值类型描述
formatstring支持的打包格式,有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>
标签名值类型描述
containerdescriptorhandlerlist为进入程序集存档的文件配置过滤器,以支持聚合各种类型的描述符片段,如components.xml、web.xml等。
handlernamestring处理程序的plexus角色提示,用于从容器查找
configurationdom处理程序的配置选项

提醒: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>
标签名值类型描述
modulesetmoduleset一个或多个项目存在于项目的pml .xml中。 这允许您包含属于项目的的源代码或二进制文件。
useallreactorprojectsboolean默认为false。为true,则该插件将包含当前反应器中用于处理的所有项目。 这些将受到包括/排除规则的约束(从2.2开始)
includesubmodulesboolean默认true。如果设置为false,插件将从这个模块集的处理中排除子模块。 否则,它将处理所有子模块,每个子模块都要包含/排除规则。 (从2.2.1开始)
includes/include*list包含哪些
excludes/exclude*list排除哪些
sourcemodulesources插件将在结果程序集中包含该集合中包含的模块的源文件
binariesmodulebinaries插件将在结果程序集中包含该集合中包含的模块的二进制文件
source

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

标签名值类型描述
usedefaultexcludesboolean默认为true。在计算受此集合影响的文件时,是否应该使用标准排除模式,比如匹配cvs和subversion元数据文件的那些模式。
outputdirectorystring相对于程序集的根目录的根设置输出目录。 例如,“log”将把指定的文件放到log目录中。
includes/include*list包含哪些
excludes/exclude*list排除哪些
filemodestring默认值为0644。类似于unix权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(user)(group)(other),其中每个组件都是read = 4, write = 2, execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他只读”。
directorymodestring默认值为0755。类似于unix权限,设置包含目录的目录模式。 这是一个八进制值。 格式:(user)(group)(other),其中每个组件都是read = 4, write = 2, execute = 1的和。 例如,0755表示“用户读写”、“组”和“其他只读”。
filesets/filesetlist指定要将每个包含模块中的哪些文件组包含在程序集中。 通过提供一个或多个子元素来指定文件集
includemoduledirectoryboolean默认值为true。指定是否应该将模块的finalname前缀到应用于它的任何文件集的outputdirectory值
excludesubmoduledirectoriesboolean默认值为true。指定当前模块下的子模块目录是否应从应用于该模块的文件集中排除。 如果你只是想复制与这个moduleset匹配的模块列表的源代码,忽略(或单独处理)存在于当前目录下的模块,这可能是有用的。
outputdirectorymappingstringdefault value is: ${module.artifactid}。设置此程序集中包含的所有模块基目录的映射模式。 注意:该字段仅在includemoduledirectory == true时使用
binaries

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

标签名值类型描述
outputdirectorystring相对于程序集的根目录的根设置输出目录
includes/include*list包含哪些
excludes/exclude*list排除哪些
filemodestring默认值为0644。类似于unix权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(user)(group)(other),其中每个组件都是read = 4, write = 2, execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他只读”。
directorymodestring默认值为0755。类似于unix权限,设置包含目录的目录模式。 这是一个八进制值。 格式:(user)(group)(other),其中每个组件都是read = 4, write = 2, execute = 1的和。 例如,0755表示“用户读写”、“组”和“其他只读”。
attachmentclassifierstring当指定时,attachmentclassifier将导致组装人员查看附加到模块的工件,而不是主项目工件。 如果它能找到匹配指定分类器的附加工件,它将使用它; 否则,它将抛出异常
includedependenciesboolean默认值为true。如果设置为true,插件将包含这里包含的项目模块的直接和过渡依赖关系。 否则,它将只包含模块包。
dependencysets/dependencysetlist指定要包含在程序集中的模块的哪些依赖项。 dependencyset可以通过提供一个或多个子元素来指定
unpackboolean默认值为true。如果设置为true,此属性将把所有模块包解压到指定的输出目录。 当设置为false时,模块包将作为存档文件(jar)包含。
unpackoptionsunpackoptions允许对从模块工件解包的项指定包含和排除,以及过滤选项
outputfilenamemappingstring设置此程序集中包含的所有非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排除哪些
filteredboolean默认值为false。是否使用构建配置中的属性,在文件从归档文件解压缩时过滤文件中的符号
nonfilteredfileextensions/nonfilteredfileextension*list附加的文件扩展名不应用过滤
lineendingstring设置文件的行结束符。 (从2.2开始)有效值:“keep” -保留所有行尾; “unix” -使用unix风格的行结束符 ;“lf” -使用单行换行结束符 ;“dos” -使用dos风格的行结尾 ;“crlf” -使用回车,换行
usedefaultexcludesboolean默认值为true。在计算受此集合影响的文件时,是否应该使用标准排除模式,比如匹配cvs和subversion元数据文件的那些模式。 对于向后兼容性,默认值为true。
encodingstring允许指定在解压缩存档时使用的编码,对于支持指定编码的解压缩存档。 如果未指定,将使用archiver默认值。 归档文件默认值通常表示正常(现代)的值。

filesets

管理一组文件的存放位置

结构:

<filesets>
    <fileset>
        <usedefaultexcludes/>
        <outputdirectory/>
        <includes/>
        <excludes/>
        <filemode/>
        <directorymode/>
        <directory/>
        <lineending/>
        <filtered/>
        <nonfilteredfileextensions/>
    </fileset>
</filesets>
标签名值类型描述
usedefaultexcludesboolean默认值为true。在计算受此集合影响的文件时,是否应该使用标准排除模式,比如匹配cvs和subversion元数据文件的那些模式。 对于向后兼容性,默认值为true。
outputdirectorystring指定文件集合的输出目录,该目录是相对于根目录
includes/include*list包含文件
excludes/exclude*list排除文件
filemodestring默认值为0644。类似于unix权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(user)(group)(other),其中每个组件都是read = 4, write = 2, execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他“只读。
directorymodestring默认值为0755。类似于unix权限,设置包含目录的目录模式。 这是一个八进制值。 格式:(user)(group)(other),其中每个组件都是read = 4, write = 2, execute = 1的和。 例如,0755表示“用户读写”、“组”和“其他”只读。
directorystring设置模块目录中的绝对或相对位置。 例如,"src/main/bin"会选择定义依赖项的项目的这个子目录
lineendingstring设置文件的行结束符。 (从2.2开始)有效值:“keep” -保留所有行尾; “unix” -使用unix风格的行结束符 ;“lf” -使用单行换行结束符 ;“dos” -使用dos风格的行结尾 ;“crlf” -使用回车,换行
filteredboolean默认值为false。是否使用构建配置中的属性在复制文件时过滤符号
nonfilteredfileextensions/nonfilteredfileextension*list附加的文件扩展名不应用过滤

files

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

结构:

<files>
    <file>
        <source/>
        <sources/>
        <outputdirectory/>
        <destname/>
        <filemode/>
        <lineending/>
        <filtered/>
    </file>
</files>
标签名值类型描述
sourcestring源文件,相对路径或绝对路径
sources/source*list组合并包含在程序集中的模块文件目录中的绝对或相对路径集
outputdirectorystring输出目录
destnamestring设置目标文件名。 default与源文件的名称相同
filemodestring默认值为0644。类似于unix权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(user)(group)(other),其中每个组件都是read = 4, write = 2, execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他只读”。
lineendingstring设置文件的行结束符。 (从2.2开始)有效值:“keep” -保留所有行尾; “unix” -使用unix风格的行结束符 ;“lf” -使用单行换行结束符 ;“dos” -使用dos风格的行结尾 ;“crlf” -使用回车,换行
filteredboolean设置是否过滤文件

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>
标签名值类型描述
outputdirectorystring指定包依赖目录,该目录是相对于根目录
includes/include*list包含依赖
excludes/exclude*list排除依赖
filemodestring默认值为0644。类似于unix权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(user)(group)(other),其中每个组件都是read = 4, write = 2, execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他只读”。
directorymodestring设置文件的行结束符。 (从2.2开始)有效值:“keep” -保留所有行尾; “unix” -使用unix风格的行结束符 ;“lf” -使用单行换行结束符 ;“dos” -使用dos风格的行结尾 ;“crlf” -使用回车,换行
usestrictfilteringboolean默认值为true。如果指定为true,那么在程序集创建过程中任何用于过滤实际构件的包含/排除模式都将导致构建失败,并显示错误。这是为了强调过时的包含或排除,或者表示程序集描述符配置不正确。(从2.2开始)
outputfilenamemappingstring设置此程序集中包含的所有非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}。
unpackboolean默认为false。如果设置为true,此属性将把所有依赖项解压缩到指定的输出目录中。 当设置为false时,依赖项将被包含为存档(jar)。 只能解压jar, zip, tar.gz和tar.gz。 bz。
unpackoptionsunpackoptions允许对从依赖项工件解包的项指定包含和排除,以及过滤选项。
scopestring默认为runtime。设置这个dependencyset的依赖范围
useprojectartifactboolean默认为true。确定当前项目生成期间生成的工件是否应包含在此依赖项集中
useprojectattachmentsboolean默认为false。确定是否应将当前项目生成期间产生的附加构件包括在此依赖项集中
usetransitivedependenciesboolean默认为true。确定是否将传递依赖项包含在当前依赖项集的处理中。 如果为真,包含/排除/usetransitivefiltering将应用于除了主项目依赖工件之外的可传递依赖工件。 如果为false, usetransitivefiltering是无意义的,并且包含/排除只会影响项目的直接依赖关系
usetransitivefilteringboolean默认为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校验和。 这对于创建将部署到内部存储库的存档非常有用。

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

标签名值类型描述
outputdirectorystring指定包依赖目录,该目录是相对于根目录
includes/include*list当出现子元素时,它们定义一组要包含的工件坐标。 如果不存在,则<包括>表示所有有效值。 工件坐标可以以简单的groupid:artifactid形式给出,也可以以groupid:artifactid:type[:classifier]:version形式完全限定。 此外,还可以使用通配符,如*:maven-*
excludes/exclude*list当出现子元素时,它们定义一组要排除的依赖构件坐标。 如果不存在任何排除,则<排除>表示没有排除。 工件坐标可以以简单的groupid:artifactid形式给出,也可以以groupid:artifactid:type[:classifier]:version形式完全限定。 此外,还可以使用通配符,如*:maven-*
filemodestring默认值为0644。类似于unix权限,设置包含的文件的文件模式。 这是一个八进制值。 格式:(user)(group)(other),其中每个组件都是read = 4, write = 2, execute = 1的和。 例如:“0644”表示“用户读写”、“组”和“其他只读”。
directorymodestring设置文件的行结束符。 (从2.2开始)有效值:“keep” -保留所有行尾; “unix” -使用unix风格的行结束符 ;“lf” -使用单行换行结束符 ;“dos” -使用dos风格的行结尾 ;“crlf” -使用回车,换行
includemetadataboolean默认为true。如果设置为true,该属性将触发存储库元数据的创建,从而允许将存储库用作功能性远程存储库。
groupversionalignmentslist指定要将一组工件与指定的版本保持一致。 通过提供一个或多个子元素来指定groupversionalignment。
scopestring默认为runtime。指定此存储库中包含的工件的范围
groupversionalignment

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

标签名值类型描述
idstring您希望为其对齐版本的工件的groupid
versionstring要将此组对齐到的版本
excludes/exclude*list当出现子元素时,它们定义要排除的工件的artifactid。 如果不存在任何排除,则<排除>表示没有排除。 通过提供一个或多个子元素来指定排除

componentdescriptors

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com