跳到主要内容

管理依赖关系

DeepSeek V3 中英对照 Managing Dependencies

要在您的 Spring Boot 应用程序中管理依赖项,您可以应用 io.spring.dependency-management 插件,或者使用 Gradle 的原生 BOM 支持。前者的主要优势在于它提供了基于属性的托管版本自定义,而使用后者可能会带来更快的构建速度。

使用 Dependency Management 插件管理依赖

当你应用 io.spring.dependency-management 插件时,Spring Boot 的插件会自动从你所使用的 Spring Boot 版本中 导入 spring-boot-dependencies bom。这将提供一个类似于 Maven 用户所享有的依赖管理体验。例如,它允许你在声明 bom 中管理的依赖时省略版本号。要使用此功能,请以通常的方式声明依赖项,但省略版本号:

dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
}
groovy

自定义托管版本

在应用依赖管理插件时,自动导入的 spring-boot-dependencies 物料清单(BOM)使用属性来控制其管理的依赖版本。浏览 Spring Boot 参考文档中的 依赖版本属性 部分,以获取这些属性的完整列表。

要自定义托管版本,你需要设置其对应的属性。例如,要自定义由 slf4j.version 属性控制的 SLF4J 版本:

ext['slf4j.version'] = '1.7.20'
groovy
注意

每个 Spring Boot 版本都是针对一组特定的第三方依赖进行设计和测试的。覆盖版本可能会导致兼容性问题,应谨慎操作。

独立使用 Spring Boot 的依赖管理

Spring Boot 的依赖管理可以在不应用 Spring Boot 插件的情况下在项目中使用。SpringBootPlugin 类提供了一个 BOM_COORDINATES 常量,可以用来导入 BOM 而无需知道其 group ID、artifact ID 或版本。

首先,配置项目以依赖 Spring Boot 插件,但不要应用它:

plugins {
id 'org.springframework.boot' version '3.4.2' apply false
}
groovy

Spring Boot 插件对依赖管理插件的依赖意味着您可以在无需声明对其依赖的情况下使用依赖管理插件。这也意味着您将自动使用与 Spring Boot 相同版本的依赖管理插件。

应用依赖管理插件,然后配置它以导入 Spring Boot 的 bom:

apply plugin: 'io.spring.dependency-management'

dependencyManagement {
imports {
mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
}
}
groovy

上面的 Kotlin 代码有些笨拙。这是因为我们使用了命令式的方式来应用依赖管理插件。

我们可以通过在根父项目中应用插件,或者像我们对 Spring Boot 插件所做的那样使用 plugins 块,来使代码不那么笨拙。这种方法的一个缺点是它迫使我们指定依赖管理插件的版本:

plugins {
java
id("org.springframework.boot") version "3.4.2" apply false
id("io.spring.dependency-management") version "1.1.7"
}

dependencyManagement {
imports {
mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
}
}
kotlin

了解更多

要了解更多关于依赖管理插件的功能,请参阅其文档

使用 Gradle 的 BOM 支持管理依赖

Gradle 允许通过将 bom 声明为 platformenforcedPlatform 依赖项来管理项目的版本。platform 依赖项将 bom 中的版本视为建议,依赖关系图中的其他版本和约束可能会导致使用 bom 中声明的依赖项版本之外的其他版本。enforcedPlatform 依赖项将 bom 中的版本视为要求,它们将覆盖依赖关系图中发现的任何其他版本。

SpringBootPlugin 类提供了一个 BOM_COORDINATES 常量,该常量可以用于声明对 Spring Boot 的 BOM(Bill Of Materials)的依赖,而无需知道其 group ID、artifact ID 或版本,如下例所示:

dependencies {
implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
}
groovy

一个平台或强制平台只会约束在其声明的配置中或从其声明的配置中扩展的配置的版本。因此,可能需要在多个配置中声明相同的依赖项。

自定义托管版本

在使用 Gradle 的 BOM 支持时,你不能使用 spring-boot-dependencies 中的属性来控制它所管理的依赖版本。相反,你必须使用 Gradle 提供的机制之一。其中一种机制是解析策略。SLF4J 的所有模块都在 org.slf4j 组中,因此可以通过配置该组中的每个依赖项来使用特定版本,如下例所示:

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.slf4j') {
details.useVersion '1.7.20'
}
}
}
groovy
注意

每个 Spring Boot 版本都是针对一组特定的第三方依赖进行设计和测试的。覆盖版本可能会导致兼容性问题,因此应谨慎操作。