此版本仍在开发中,尚未视为稳定版。如需最新稳定版本,请使用 Spring Boot 4.0.4spring-doc.cadn.net.cn

管理依赖项

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

使用依赖管理插件管理依赖

当您应用 io.spring.dependency-management 插件时,Spring Boot 的插件将自动从您使用的 Spring Boot 版本中 导入 spring-boot-dependencies BOM。 这提供了与 Maven 用户所享受的类似的依赖管理经验。 例如,它允许您在声明由 BOM 管理的依赖项时省略版本号。 要使用此功能,请按常规方式声明依赖项,但省略版本号:spring-doc.cadn.net.cn

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

自定义受管版本

当应用依赖管理插件时,会自动导入 spring-boot-dependencies BOM,该 BOM 使用属性来控制其所管理的依赖项的版本。 请参阅 Spring Boot 参考文档中的依赖版本属性一节,以获取这些属性的完整列表。spring-doc.cadn.net.cn

要自定义一个托管版本,需设置其对应的属性。 例如,要自定义由 slf4j.version 属性控制的 SLF4J 版本:spring-doc.cadn.net.cn

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

单独使用 Spring Boot 的依赖管理

Spring Boot 的依赖管理可以在项目中使用,而无需在该项目中应用 Spring Boot 插件。 SpringBootPlugin 类提供了一个 BOM_COORDINATES 常量,可用于导入 BOM,而无需知道其 groupId、artifactId 或版本。spring-doc.cadn.net.cn

首先,配置项目以依赖 Spring Boot 插件,但不要应用该插件:spring-doc.cadn.net.cn

buildscript {
	repositories {
		maven {
			url = 'https://repo.spring.io/libs-snapshot'
		}
	}

	dependencies {
		classpath 'org.springframework.boot:spring-boot-gradle-plugin:4.1.0-SNAPSHOT'
	}
}
plugins {
	id("org.springframework.boot") version "4.1.0-SNAPSHOT" apply false
}

Spring Boot 插件对依赖管理插件的依赖意味着你可以直接使用依赖管理插件,而无需显式声明对其的依赖。 这也意味着你将自动使用与 Spring Boot 所用版本相同的依赖管理插件版本。spring-doc.cadn.net.cn

应用依赖管理插件,然后将其配置为导入 Spring Boot 的 BOM:spring-doc.cadn.net.cn

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

dependencyManagement {
	imports {
		mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
	}
}
apply(plugin = "io.spring.dependency-management")

the<DependencyManagementExtension>().apply {
	imports {
		mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
	}
}

上面的 Kotlin 代码有点别扭。 这是因为我们使用的是命令式的方式来应用依赖管理插件。spring-doc.cadn.net.cn

我们可以通过从根父项目中应用该插件,或者像使用 Spring Boot 插件那样使用 plugins 块,来使代码不那么别扭。 这种方法的一个缺点是,它迫使我们必须显式指定依赖管理插件的版本:spring-doc.cadn.net.cn

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

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

了解更多

要深入了解依赖管理插件的功能,请参阅其文档spring-doc.cadn.net.cn

使用 Gradle 的 BOM 支持管理依赖

Gradle 允许通过将 BOM 声明为 platformenforcedPlatform 依赖项来管理项目的版本。 platform 依赖项将 BOM 中的版本视为推荐版本,依赖关系图中的其他版本和约束可能会导致使用不同于 BOM 中声明的版本。 enforcedPlatform 依赖项将 BOM 中的版本视为强制要求,它们将覆盖依赖关系图中找到的任何其他版本。spring-doc.cadn.net.cn

SpringBootPlugin 类提供了一个 BOM_COORDINATES 常量,可用于声明对 Spring Boot 的 BOM(物料清单)的依赖,而无需知道其 group ID、artifact ID 或版本,如下例所示:spring-doc.cadn.net.cn

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

平台或强制平台仅会约束在其声明的配置中或继承自该声明配置的配置中的版本。 因此,可能需要在多个配置中声明相同的依赖项。spring-doc.cadn.net.cn

自定义受管版本

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

configurations.all {
	resolutionStrategy.eachDependency { DependencyResolveDetails details ->
		if (details.requested.group == 'org.slf4j') {
			details.useVersion '1.7.20'
		}
	}
}
configurations.all {
    resolutionStrategy.eachDependency {
        if (requested.group == "org.slf4j") {
            useVersion("1.7.20")
        }
    }
}
每个 Spring Boot 版本都是针对一组特定的第三方依赖进行设计和测试的。 覆盖版本可能会导致兼容性问题,应谨慎操作。