多模块Spring Boot项目基于Maven生成多Jar包的配置方案
Spring Boot多模块Maven配置方案
项目目录结构
parent-project/ ├── pom.xml # 父POM ├── mod1/ │ └── pom.xml ├── mod2/ │ └── pom.xml └── mod3/ └── pom.xml
1. 父目录pom.xml配置
父项目作为聚合模块,同时打包生成包含mod1、mod2的parent.jar:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> <name>Parent Project</name> <finalName>parent</finalName> <!-- 指定输出jar名为parent.jar --> <!-- 聚合所有子模块 --> <modules> <module>mod1</module> <module>mod2</module> <module>mod3</module> </modules> <!-- 继承Spring Boot父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.15</version> <!-- 按需选择Spring Boot版本 --> <relativePath/> </parent> <dependencies> <!-- 引入mod1、mod2依赖,打包时包含它们的类 --> <dependency> <groupId>com.example</groupId> <artifactId>mod1</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>mod2</artifactId> <version>${project.version}</version> </dependency> </dependencies> <build> <plugins> <!-- 配置Jar插件,可选配置主类生成可执行jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>com.example.MainClass</mainClass> <!-- 按需指定主类 --> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project>
2. mod1/pom.xml配置
子模块mod1,继承父POM:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mod1</artifactId> <name>Module 1</name> <packaging>jar</packaging> <!-- 按需添加mod1的业务依赖 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies> </project>
3. mod2/pom.xml配置
子模块mod2,继承父POM:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mod2</artifactId> <name>Module 2</name> <packaging>jar</packaging> <!-- 按需添加mod2的业务依赖 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
4. mod3/pom.xml配置
子模块mod3,使用Maven Shade插件生成独立fat jar:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mod3</artifactId> <name>Module 3</name> <packaging>jar</packaging> <!-- 按需添加mod3的业务依赖 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 配置Shade插件生成fat jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <finalName>mod3fatjar</finalName> <!-- 指定输出fat jar名称 --> <!-- 配置主类生成可执行fat jar --> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.example.mod3.Mod3MainClass</mainClass> <!-- 按需指定主类 --> </transformer> </transformers> <!-- 可选:排除签名文件避免冲突 --> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
执行构建
在父项目根目录运行Maven命令:
mvn clean package
预期结果
- 父项目根目录
target/下生成parent.jar(包含mod1、mod2的类及依赖) - mod3目录
target/下生成mod3fatjar.jar(包含mod3自身及所有依赖的fat jar)
内容的提问来源于stack exchange,提问作者bridgemnc
相关产品推荐
相关产品推荐

