要处理过滤此版本的 Maven 程序集插件,请使用Maven Filtering 3.1.1。
要处理存档此版本的 Maven 程序集插件,请使用Maven Archiver 3.5.0。
本文档旨在提供使用 maven-assembly-plugin 的说明。为了使这个讨论有用,涵盖两个主题至关重要:插件的配置 - 在 POM 中,并且在可能的情况下,从命令行 - 以及不同的执行方式。为了清楚起见,我们将在执行之前介绍配置。
开始使用 Assembly 插件非常简单。如果要使用预制的程序集描述符之一,请使用 < descriptorRefs> /< descriptorRef>参数配置要使用的描述符。如果要使用自定义程序集描述符,请使用 < descriptor> /< descriptor>参数配置描述符的路径。
请注意,Assembly Plugin 的一次调用实际上可以从多个描述符生成程序集,从而使您能够最大程度地灵活地自定义项目生成的二进制文件套件。创建程序集时,它将使用 assemblyId 作为工件的分类器,并将创建的程序集附加到项目中,以便在安装和部署阶段将其上传到存储库中。
例如,假设我们的项目生成了一个 JAR。如果我们想创建一个包含项目依赖项的程序集二进制文件,我们可以利用程序集插件的预制描述符之一。您在项目的pom.xml中对其进行如下配置:
<project> [...] <build> [...] <plugins> <plugin> <!-- NOTE: We don't need a groupId specification because the group is org.apache.maven.plugins ...which is assumed by default. --> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> [...] </project>
请注意,Assembly Plugin 允许您一次指定多个descriptorRefs,以在一次调用中生成多种类型的程序集。
或者,我们在src/assembly目录中创建了一个名为src.xml的自定义程序集描述符(有关更多信息,请参阅参考资料部分)。我们可以告诉 Assembly Plugin 使用它:
<project> [...] <build> [...] <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptors> <descriptor>src/assembly/src.xml</descriptor> </descriptors> </configuration> [...] </project>
再次注意,我们可以在此处指定多个自定义程序集描述符。此外,可以在同一配置中指定描述符和descriptorRefs的混合。
一旦为您希望项目生成的程序集配置了各种描述符和descriptorRefs ,就可以构建它们了。
在大多数情况下,您需要确保您的程序集是作为正常构建过程的一部分创建的。这确保了程序集存档可用于安装和部署,并且它们是在项目发布期间创建的。这是由程序集处理的:单一目标。
要将单个目标绑定到项目的构建生命周期,您可以添加此配置(假设您使用的是jar-with-dependencies预制描述符):
<project> [...] <build> [...] <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> [...] </project>
然后,要创建项目程序集,只需从默认生命周期执行正常的包阶段:
mvn package
此构建完成后,您应该会在目标目录中看到一个文件,其名称类似于以下内容:
target/sample-1.0-SNAPSHOT-jar-with-dependencies.jar
注意工件分类器,在版本结尾和文件扩展名开头之间,jar-with-dependencies。这是用于创建此工件的程序集描述符的ID 。
正如您毫无疑问地注意到的那样,Assembly Plugin 是一种非常有用的方式,可以为您的项目创建一个自包含的二进制工件,等等。但是,一旦您创建了这个独立的 JAR,您可能希望能够使用-jar JVM 开关来执行它。
为了适应这一点,Assembly Plugin 支持配置<archive>元素,该元素由maven-archiver处理(请参阅参考资料)。使用此配置,很容易配置JAR 清单的Main-Class属性:
<project> [...] <build> [...] <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> [...] <archive> <manifest> <mainClass>org.sample.App</mainClass> </manifest> </archive> </configuration> [...] </plugin> [...] </project>
如果我们将此配置添加到上面的单目标示例并重新构建,我们将在生成的 JAR的META-INF/MANIFEST.MF文件中看到类似这样的条目:
[...] Main-Class: org.sample.App
有关 Assembly Plugin 的高级配置的更多信息,请参阅参考资料部分。