在搭建多模块项目的时候,会遇到这个问题:多个子模块都需要用 Spring Boot,怎么统一管理依赖版本呢?

Spring Boot 提供了两种集成方式,各有各的使用场景。

两种方式对比

方式一:继承 spring-boot-starter-parent

这是最常见的方式,直接让项目继承 Spring Boot 的父 pom。

优点

  • 配置简单,开箱即用
  • 自动管理大量依赖版本
  • 提供了很多默认配置(插件、资源过滤等)

缺点

  • 一个项目只能有一个父 pom
  • 如果企业有自己的父 pom,就冲突了
  • 不够灵活,受 Spring Boot 父 pom 限制

示例

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.5.0</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 不需要指定版本 -->
    </dependency>
</dependencies>

方式二:使用 dependencyManagement 导入

这种方式不继承 Spring Boot 父 pom,而是通过 dependencyManagement 导入依赖管理。

优点

  • 可以自定义父 pom
  • 适合企业多模块项目
  • 灵活性高,不受 Spring Boot 父 pom 限制
  • 可以同时管理多个框架的依赖版本

缺点

  • 需要手动配置一些默认属性(如 Java 版本、编码等)
  • 配置相对复杂一些

示例

父 pom 配置

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>3.5.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

子模块使用

<parent>
    <groupId>wang.smalleyes.cloud</groupId>
    <artifactId>multi-module-project</artifactId>
    <version>1.0.0</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 不需要指定版本 -->
    </dependency>
</dependencies>

实际应用

下面展示如何使用 方式二 搭建多模块项目。

父 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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>wang.smalleyes.cloud</groupId>
    <artifactId>multi-module-project</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <properties>
        <java.version>21</java.version>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!-- Spring Boot 版本 -->
        <spring-boot.version>3.5.0</spring-boot.version>

        <!-- 常用依赖版本管理示例 -->
        <lombok.version>1.18.36</lombok.version>
        <hutool.version>5.8.34</hutool.version>
    </properties>

    <!-- 依赖管理 -->
    <dependencyManagement>
        <dependencies>
            <!-- 导入 Spring Boot 依赖管理(包含所有 Spring Boot 相关依赖的版本) -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- 其他依赖版本管理示例 -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <modules>
        <module>module-example</module>
    </modules>

</project>

子模块配置

<?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>

    <parent>
        <groupId>wang.smalleyes.cloud</groupId>
        <artifactId>multi-module-project</artifactId>
        <version>1.0.0</version>
    </parent>

    <artifactId>module-example</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <!-- Spring Boot 依赖,不需要指定版本 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

这样,所有子模块都可以统一使用父 pom 管理的依赖版本,不需要每个模块都重复配置。

如何选择

使用 parent 方式的场景:

  • 单体项目,不需要自定义父 pom
  • 快速开发,不想配置太多
  • 个人项目或小型项目

使用 dependencyManagement 方式的场景:

  • 企业多模块项目,需要统一管理依赖
  • 有自己的父 pom(企业内部框架)
  • 需要同时管理多个技术栈的版本(Spring Boot + Spring Cloud + 其他)
  • 大型项目,需要更灵活的依赖管理

注意事项

使用 dependencyManagement 方式时,需要手动配置一些属性:

<properties>
    <!-- Java 版本 -->
    <java.version>21</java.version>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>

    <!-- 项目编码 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!-- Spring Boot 版本 -->
    <spring-boot.version>3.5.0</spring-boot.version>
</properties>

这些属性在 spring-boot-starter-parent 中已经默认配置好了,但是使用 dependencyManagement 方式时需要手动指定。

总结

两种方式各有优势:

  • parent 方式:简单直接,适合快速开发和小型项目
  • dependencyManagement 方式:灵活强大,适合企业多模块项目

在实际项目中,根据需求选择合适的方式就好。

对于多模块项目,dependencyManagement 方式更加合适,可以统一管理所有子模块的依赖版本,后续添加新模块也会更方便。

这种方式可以很灵活地扩展,如果后续需要集成 Spring Cloud 或其他框架,只需要在父 pom 的 dependencyManagement 中添加对应的依赖管理即可。

最后修改:2026 年 01 月 27 日
如果觉得我的文章对你有用,请随意赞赏