使用maven-assembly-plugin打包多模块项目需要分为以下几个步骤:
- 在父项目中添加maven-assembly-plugin插件,并对子模块的打包进行配置;
- 子模块中添加打包所需相关资源,并配置打包信息。
下面提供两个示例来更清晰地讲解上述步骤。
示例1:
假设我们有一个项目,该项目包含一个父项目和两个子模块:模块A和模块B。我们希望使用maven-assembly-plugin将两个子模块打包成zip文件并发布到Maven私服上。
- 在父项目中,pom.xml中添加如下代码:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<finalName>${project.artifactId}</finalName>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
<appendAssemblyId>false</appendAssemblyId>
<attach>true</attach>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>true</appendAssemblyId>
<finalName>${project.artifactId}</finalName>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
解释:配置maven-assembly-plugin插件,为子模块指定一个描述文件(descriptor),在该文件中指定需要被打包的文件和资源,以及如何打包。子模块的描述文件将放在src/main/assembly/assembly.xml所指定的路径下。
- 对于模块A和B,分别在pom.xml中添加以下代码:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<finalName>${project.artifactId}</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</plugin>
</plugins>
</build>
解释:在子模块中,我们只需要对maven-assembly-plugin插件进行最基本的配置,指定文件名和禁用附加程序集编号。
-
在模块A和B中,各添加一个文件,在文件中写入一些内容,用于检验打包是否成功。
-
在子模块A和B下,分别创建一个名为assembly.xml的文件,并在该文件中指定需要被打包的文件和资源。
以子模块A为例,代码如下:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>distribution</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>target</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>${project.build.finalName}.jar</include>
<include>*.txt</include>
</includes>
</fileSet>
</fileSets>
</assembly>
解释:在该文件中,我们指定需要在打包文件中包含target目录下的jar包和txt文件,也就是我们在前面创建的那个文件。
- 执行maven打包命令,进入父项目目录,执行:
mvn clean package
执行结果为:两个子模块都成功打包成了zip文件,分别保存在模块A和B的target目录下。
示例2:
假设我们有一个多模块项目,包含一个父项目和三个子模块:模块A、模块B和模块C。我们希望使用maven-assembly-plugin将三个子模块打包成一个tar.gz文件并发布到Maven私服上。
- 在父项目中,pom.xml中添加如下代码:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<finalName>${project.artifactId}</finalName>
<descriptorRefs>
<descriptorRef>tar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
<appendAssemblyId>false</appendAssemblyId>
<attach>true</attach>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>true</appendAssemblyId>
<finalName>${project.artifactId}</finalName>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
解释:跟示例1一样,只是把输出格式改为了tar.gz,并且在子模块中指定的描述文件也要改为tar包的描述文件。
- 对于模块A、B和C,分别在pom.xml中添加以下代码:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<finalName>${project.artifactId}</finalName>
</configuration>
</plugin>
</plugins>
</build>
-
在模块A、B和C中,各添加一个文件,在文件中写入一些内容。
-
在模块A、B和C下,分别创建一个名为assembly.xml的文件,并在该文件中指定需要被打包的文件和资源。
以模块A为例,代码如下:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>distribution</id>
<formats>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>target</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>${project.build.finalName}.jar</include>
<include>*.txt</include>
</includes>
</fileSet>
</fileSets>
</assembly>
- 执行maven打包命令,进入父项目目录,执行:
mvn clean package
执行结果为:三个子模块都成功打包成了一个tar.gz文件,保存在模块A的target目录下。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用maven-assembly-plugin如何打包多模块项目 - Python技术站