Maven 多模块项目管理

Maven 多模块项目管理(Multi-Module)完全实战(2025 最新版)

一句话总结
一个 parent POM + 多个 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-usercommon
  • 一键构建全部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 一键生成(推荐)

  1. File → New → Project → Maven
  2. 勾选 Create from archetype → 选 maven-archetype-quickstart
  3. 填写 groupId=com.enterprise, artifactId=enterprise-parent
  4. 右键 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 自动识别 commonservice-userweb-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 优化配置

  1. 自动导入Settings → Build → Maven → Importing → Import Maven projects automatically
  2. 模块化视图:右键 pom.xmlFlatten Modules
  3. 一键运行:右键 web-api → Run spring-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 链接!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注