Maven 多模块项目管理
Maven 多模块项目管理(Multi-Module)完全实战(2025 最新版)
一句话总结:
一个parentPOM + 多个module子项目 = 统一依赖、统一构建、统一发布!
一、什么是多模块项目?
enterprise-project/ ← 父项目(packaging=pom)
├── pom.xml ← **父 POM**
├── common/ ← 子模块1
│ └── pom.xml
├── service-user/ ← 子模块2
│ └── pom.xml
├── service-order/ ← 子模块3
│ └── pom.xml
└── web-api/ ← 子模块4(聚合)
└── pom.xml
优势:
- 统一版本管理(
dependencyManagement) - 模块间依赖(
service-user→common) - 一键构建全部(
mvn install) - 独立部署(只打包
web-api)
二、创建多模块项目(2 种方式)
方式1:手动创建(推荐新手)
# 1. 创建父项目目录
mkdir enterprise-project && cd enterprise-project
# 2. 创建父 pom.xml
cat > pom.xml << 'EOF'
<?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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.enterprise</groupId>
<artifactId>enterprise-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging> <!-- 关键:父项目用 pom -->
<name>Enterprise Parent</name>
<modules>
<module>common</module>
<module>service-user</module>
<module>service-order</module>
<module>web-api</module>
</modules>
<!-- 统一版本管理 -->
<properties>
<java.version>17</java.version>
<spring-boot.version>3.3.5</spring-boot.version>
<lombok.version>1.18.34</lombok.version>
</properties>
<!-- 依赖版本锁定 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
EOF
# 3. 创建子模块
for module in common service-user service-order web-api; do
mkdir -p $module/src/main/java
mvn archetype:generate \
-DgroupId=com.enterprise \
-DartifactId=$module \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false \
-Dpackage=com.enterprise.${module//-} \
-DoutputDirectory=$module
# 删除多余文件
rm -rf $module/src $module/pom.xml.bak
done
方式2:IDEA 一键生成(推荐)
- File → New → Project → Maven
- 勾选 Create from archetype → 选
maven-archetype-quickstart - 填写
groupId=com.enterprise,artifactId=enterprise-parent - 右键
enterprise-parent→ New → Module → 重复创建子模块
三、子模块 pom.xml 配置(关键!)
示例:common/pom.xml
<?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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 继承父 POM -->
<parent>
<groupId>com.enterprise</groupId>
<artifactId>enterprise-parent</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>common</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
子模块无需写
<version>和<dependencyManagement>,自动继承!
四、模块间依赖(核心!)
service-user 依赖 common
<!-- service-user/pom.xml -->
<dependencies>
<dependency>
<groupId>com.enterprise</groupId>
<artifactId>common</artifactId>
<version>${project.version}</version> <!-- 或 ${project.parent.version} -->
</dependency>
</dependencies>
构建顺序:Maven 自动识别 common → service-user → web-api
五、常用命令(从父项目根目录执行)
| 命令 | 作用 |
|---|---|
mvn clean install | 构建全部模块 |
mvn install -pl :service-user | 只构建 user 模块 |
mvn install -pl :web-api -am | 构建 web + 它的依赖 |
mvn install -pl :common -amd | 构建 common + 依赖它的模块 |
mvn -DskipTests clean package | 跳过测试打包 |
六、聚合模块(Aggregator)—— 一键启动
web-api 作为聚合入口
<!-- web-api/pom.xml -->
<packaging>war</packaging> <!-- 或 jar -->
<dependencies>
<dependency>
<groupId>com.enterprise</groupId>
<artifactId>service-user</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.enterprise</groupId>
<artifactId>service-order</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
运行:
cd web-api
mvn spring-boot:run
七、版本管理最佳实践
| 方式 | 说明 |
|---|---|
${project.version} | 当前模块版本(推荐) |
${project.parent.version} | 父项目版本 |
父 POM 统一 <version> | 所有模块同版本 |
升级版本:只改父 POM 的 <version>!
八、IDEA 优化配置
- 自动导入:
Settings → Build → Maven → Importing → Import Maven projects automatically - 模块化视图:右键
pom.xml→ Flatten Modules - 一键运行:右键
web-api→ Runspring-boot:run
九、完整结构示例
enterprise-project/
├── pom.xml ← 父 POM
├── common/
│ ├── pom.xml ← 公共工具
│ └── src/main/java/com/enterprise/common/Utils.java
├── service-user/
│ ├── pom.xml ← 用户服务
│ └── src/main/java/com/enterprise/serviceuser/UserService.java
├── service-order/
│ ├── pom.xml ← 订单服务
│ └── src/main/java/com/enterprise/serviceorder/OrderService.java
└── web-api/
├── pom.xml ← Web 入口
└── src/main/java/com/enterprise/webapi/WebApplication.java
十、常见问题解决
| 问题 | 解决方案 |
|---|---|
Cannot find parent | 检查 <relativePath>../pom.xml</relativePath> |
Module not found | 执行 mvn install 安装到本地仓库 |
循环依赖 | 避免 A→B→A,提取 common |
版本冲突 | mvn dependency:tree -Dverbose |
十一、一句话总结
“父 POM 管版本,子模块管业务,一条命令全构建!”
恭喜!你已掌握 Maven 多模块管理!
下一步推荐
| 方向 | 内容 |
|---|---|
| Spring Boot 多模块 | spring-boot-starter-parent 继承 |
| 微服务拆分 | 每个服务一个模块 |
| CI/CD 集成 | Jenkins 只构建变更模块 |
需要 完整 Spring Boot 多模块项目模板?
回复 Spring Boot 多模块 立即获取 GitHub 链接!