1. 概述

Spring Boot 提供了父级 POM 来简化应用的创建过程。

但当我们已有需要继承的父级 POM 时,直接使用 Spring Boot 的父级 POM 可能并不合适。

本文将探讨如何在不继承父级 POM 的情况下,仍能充分利用 Spring Boot 的依赖管理能力。

2. 脱离父级 POM 使用 Spring Boot

父级 POM 主要负责依赖和插件管理,继承它能获得诸多便利,因此通常是创建 Spring Boot 应用的首选方案(具体实现可参考我们之前的文章)。

但实际开发中,我们可能因架构规范或其他限制,必须使用自定义父级 POM

✅ 幸运的是,Spring Boot 提供了替代方案:通过导入 spring-boot-dependencies 依赖,仍能享受依赖管理的好处:

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

之后就能直接添加 Spring 依赖并使用其特性:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

⚠️ 但要注意:脱离父级 POM 后,插件管理会失效,需显式添加 spring-boot-maven-plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

3. 覆盖依赖版本

若需使用与 Spring Boot 管理版本不同的依赖,必须在 dependencyManagement 中、且在 spring-boot-dependencies 之前声明

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>3.1.5</version>
        </dependency>
    </dependencies>
    // ...
</dependencyManagement>

❌ 直接在 dependencyManagement 外声明版本将无效——这是常见踩坑点!

4. 总结

本文展示了在不继承父级 POM 的情况下使用 Spring Boot 的方法。核心思路是通过 import 作用域引入依赖管理,并显式配置必要插件。

完整示例代码可在 GitHub 获取。


原始标题:Spring Boot Dependency Management with a Custom Parent | Baeldung