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 链接!