Spring Boot父子工程POM依赖关系举例详解

 更新时间:2025年08月06日 11:33:56   作者:TracyCoder123  
这篇文章主要介绍了Spring Boot父子工程POM依赖关系的相关资料,Spring Boot父子工程通过Maven继承机制实现统一版本、依赖和插件管理,模块化开发与代码复用,提升项目可维护性与效率,需要的朋友可以参考下

1. 父子工程概述

Spring Boot 父子工程是一种多模块项目结构,通过 Maven 的继承机制来管理依赖关系。这种结构具有以下优势:

  • 统一版本管理:所有子模块使用相同的依赖版本
  • 代码复用:公共代码可以提取到独立模块
  • 模块化开发:不同功能模块独立开发和维护
  • 依赖隔离:避免循环依赖,明确模块职责

2. 项目结构

spring-boot-parent/
├── parent-pom.xml          # 父工程POM
├── common/                 # 公共工具模块
│   └── pom.xml
├── api/                    # API接口模块
│   └── pom.xml
├── service/                # 业务服务模块
│   └── pom.xml
└── web/                    # Web应用启动模块
    └── pom.xml

3. 父工程 POM 详解

3.1 基本信息配置

<groupId>com.example</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>  <!-- 关键:父工程必须是pom类型 -->

3.2 子模块声明

<modules>
    <module>common</module>
    <module>api</module>
    <module>service</module>
    <module>web</module>
</modules>

3.3 版本统一管理

<properties>
    <spring-boot.version>3.2.0</spring-boot.version>
    <spring-cloud.version>2023.0.0</spring-cloud.version>
    <mysql.version>8.0.33</mysql.version>
    <!-- 其他版本号... -->
</properties>

3.4 依赖管理 (dependencyManagement)

重要概念dependencyManagement 不会直接引入依赖,只是管理版本号。

<dependencyManagement>
    <dependencies>
        <!-- Spring Boot 依赖管理 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>  <!-- 导入Spring Boot的依赖管理 -->
        </dependency>
        
        <!-- 自定义依赖版本管理 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        
        <!-- 内部模块依赖管理 -->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>common</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

3.5 公共依赖 (dependencies)

所有子模块都会继承这些依赖:

<dependencies>
    <!-- 所有子模块都会自动包含这些依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

3.6 插件管理 (pluginManagement)

<build>
    <pluginManagement>
        <plugins>
            <!-- Spring Boot Maven Plugin -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

4. 子模块 POM 详解

4.1 继承父工程

<parent>
    <groupId>com.example</groupId>
    <artifactId>spring-boot-parent</artifactId>
    <version>1.0.0</version>
    <relativePath>../parent-pom.xml</relativePath>
</parent>

4.2 模块特有依赖

<dependencies>
    <!-- 依赖其他子模块 -->
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>common</artifactId>
        <!-- 不需要指定版本,由父工程管理 -->
    </dependency>
    
    <!-- 依赖外部库 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <!-- 不需要指定版本,由父工程管理 -->
    </dependency>
</dependencies>

5. 依赖关系层次

5.1 依赖传递关系

web (启动模块)
├── service (业务服务)
│   ├── api (API接口)
│   │   └── common (公共工具)
│   └── common (公共工具)
└── common (公共工具)

5.2 各模块职责

模块职责主要依赖
common公共工具类、常量、异常hutool、fastjson、validation
apiAPI接口定义、DTOcommon、swagger
service业务逻辑、数据访问api、common、mybatis、redis
web应用启动、控制器service、actuator、devtools

6. 关键概念解析

6.1 dependencyManagement vs dependencies

  • dependencyManagement:版本管理,不引入依赖
  • dependencies:实际引入依赖
<!-- 父工程:只管理版本 -->
<dependencyManagement>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencyManagement>

<!-- 子模块:实际引入依赖 -->
<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <!-- 版本由父工程管理 -->
    </dependency>
</dependencies>

6.2 继承机制

子模块自动继承父工程的:

  • 公共依赖
  • 版本管理
  • 插件配置
  • 属性定义

6.3 依赖作用域 (Scope)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>  <!-- 仅测试时使用 -->
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>  <!-- 不会传递给依赖方 -->
</dependency>

7. 最佳实践

7.1 版本管理

  • 所有版本号统一在父工程 properties 中定义
  • 使用 ${property.name} 引用版本号
  • 定期更新依赖版本

7.2 模块划分

  • 按功能职责划分模块
  • 避免循环依赖
  • 保持模块独立性

7.3 依赖管理

  • 公共依赖放在父工程
  • 模块特有依赖放在子模块
  • 合理使用依赖作用域

7.4 构建配置

  • 只有启动模块配置 spring-boot-maven-plugin
  • 统一编译和测试插件版本
  • 配置合适的打包策略

8. 常见问题

8.1 依赖冲突

  • 使用 mvn dependency:tree 查看依赖树
  • 在父工程中排除冲突依赖
  • 使用 exclusions 标签排除传递依赖

8.2 版本不一致

  • 检查父工程版本管理是否完整
  • 确保子模块正确继承父工程
  • 验证 relativePath 配置是否正确

8.3 构建失败

  • 检查模块依赖关系是否正确
  • 验证插件配置是否兼容
  • 确认 Java 版本设置一致

9. 总结

Spring Boot 父子工程通过 Maven 的继承机制实现了:

  • 统一管理:版本、依赖、插件统一管理
  • 模块化:功能模块独立开发和维护
  • 复用性:公共代码和配置复用
  • 可维护性:清晰的依赖关系和模块职责

这种结构特别适合中大型项目的开发和维护,能够有效提高开发效率和代码质量。

到此这篇关于Spring Boot父子工程POM依赖关系的文章就介绍到这了,更多相关SpringBoot父子工程POM依赖关系内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于HTTP协议实现简单RPC框架的方法详解

    基于HTTP协议实现简单RPC框架的方法详解

    RPC全名(Remote Procedure Call),翻译过来就是远程过程调用,本文将为大家介绍如何基于HTTP协议实现简单RPC框架,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Spring 单元测试中如何进行 mock的实现

    Spring 单元测试中如何进行 mock的实现

    这篇文章主要介绍了Spring 单元测试中如何进行 mock的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 云IDE:Eclipse Che:Eclipse下一代IDE(推荐)

    云IDE:Eclipse Che:Eclipse下一代IDE(推荐)

    这篇文章主要介绍了云IDE:Eclipse Che:Eclipse下一代IDE,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Java对数器验证算法详解

    Java对数器验证算法详解

    这篇文章主要介绍了Java对数器验证算法,Java对数函数的计算方法非常有问题,然而在API中却有惊人的误差。但是假如运用了以下的方法,用Java处理数字所碰到的小麻烦就可以轻而易举的解决了
    2023-04-04
  • Java开发人员最常犯的10个错误

    Java开发人员最常犯的10个错误

    这篇文章主要介绍了Java开发人员最常犯的10个错误,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • MyBatis 实现批量插入和删除中双层循环的写法案例

    MyBatis 实现批量插入和删除中双层循环的写法案例

    这篇文章主要介绍了MyBatis 实现批量插入和删除中双层循环的写法案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Java实现常用加密算法SM3的方式及测试代码

    Java实现常用加密算法SM3的方式及测试代码

    这篇文章介绍了SM3算法在Java中的实现方式,SM3算法是一种密码散列函数标准,主要用于商用密码应用中的数字签名和验证、消息认证码生成和验证、随机数生成等,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • Mybatis之@MapKey的实现

    Mybatis之@MapKey的实现

    本文介绍了Mybatis中@MapKey注解的使用场景与效果,包含使用@MapKey和不使用@MapKey注解的区别,然后通过源码解析产生各种结果的原因,具有一定的参考价值,感兴趣的可以了解一下
    2024-09-09
  • 解决Spring Cloud Feign 请求时附带请求头的问题

    解决Spring Cloud Feign 请求时附带请求头的问题

    这篇文章主要介绍了解决Spring Cloud Feign 请求时附带请求头的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Springboot maven项目配置文件覆盖问题的处理

    Springboot maven项目配置文件覆盖问题的处理

    这篇文章主要介绍了Springboot maven项目配置文件覆盖问题的处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05

最新评论