如何高效地使用Maven进行多项目打包?
- 行业动态
- 2024-10-08
- 2
在Maven中进行多项目打包,通常涉及多个模块(Module)和一个父项目(Parent Project),每个模块可以是一个独立的项目,而父项目用于管理这些模块的构建和依赖关系,以下是详细的步骤和配置方法:
1. 项目结构
假设有一个父项目slankkaapplication
,它包含以下子模块:
slankkaserver
:主要的SpringBoot应用模块
slankkadao
:数据访问对象模块
slankkacommon
:通用工具类模块
slankkacore
:核心业务逻辑模块
2. 父项目的pom.xml配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>slankkaapplication</artifactId> <version>1.0SNAPSHOT</version> <packaging>pom</packaging> <! 父项目必须设置为 pom > <modules> <module>slankkaserver</module> <module>slankkadao</module> <module>slankkacommon</module> <module>slankkacore</module> </modules> <dependencyManagement> <dependencies> <! 在这里管理所有子模块的公共依赖 > </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>springbootmavenplugin</artifactId> <version>2.5.4</version> <! 请根据需要调整版本 > <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
3. 子模块的pom.xml配置
slankkaserver模块的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://www.maven.org/xsd/maven4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.example</groupId> <artifactId>slankkaapplication</artifactId> <version>1.0SNAPSHOT</version> </parent> <artifactId>slankkaserver</artifactId> <packaging>jar</packaging> <dependencies> <! 添加对其他子模块的依赖 > <dependency> <groupId>com.example</groupId> <artifactId>slankkadao</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>slankkacommon</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>slankkacore</artifactId> <version>${project.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>springbootmavenplugin</artifactId> <version>2.5.4</version> <! 请根据需要调整版本 > <configuration> <mainClass>com.example.SlankkaServerApplication</mainClass> <! 主启动类 > </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
slankkadao模块的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://www.maven.org/xsd/maven4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.example</groupId> <artifactId>slankkaapplication</artifactId> <version>1.0SNAPSHOT</version> </parent> <artifactId>slankkadao</artifactId> <packaging>jar</packaging> <! 添加具体的依赖项 > </project>
其他子模块的配置类似,只需修改artifactId
和具体依赖项即可。
4. 打包命令
在父项目的根目录下运行以下命令进行打包:
mvn clean package Dmaven.test.skip=true
这将首先构建并打包所有的子模块,然后根据配置文件生成最终的可执行JAR文件或WAR文件。
序号 | 概述 | Maven命令示例 |
1 | 将多个Maven项目打包成一个大的WAR包或JAR包。 | 使用mavenassemblyplugin 或mavenshadeplugin 插件。 |
2 | 使用mavenassemblyplugin 的assembly 标签定义打包规则。 |
“`xml |
<artifactId>mavenassemblyplugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jarwithdependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>makeassembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
“` |
| 3 | 使用mavenshadeplugin
的transformers
和filters
来处理依赖冲突。 | “`xml
<groupId>org.apache.maven.plugins</groupId>
<artifactId>mavenshadeplugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.MainClass</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<artifact>com.example:dependency</artifact>
<excludes>
<exclude>**/someclass.class</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
“` |
| 4 | 使用mavenassemblyplugin
的assembly
描述文件。 | 创建一个assembly.xml
文件,定义如何组合项目依赖和资源。 |
| 5 | 使用mavendependencyplugin
复制依赖到打包目录。 | “`xml
<groupId>org.apache.maven.plugins</groupId>
<artifactId>mavendependencyplugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copydependencies</id>
<phase>preparepackage</phase>
<goals>
<goal>copydependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
“` |
| 6 | 使用Maven的生命周期命令进行打包。 |mvn clean package
或mvn install
。 |
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/81549.html