管理依赖关系
要管理 Spring Boot 应用程序中的依赖项,您可以应用 io.spring.dependency-management
插件或使用 Gradle 的原生 bom 支持。
前者的主要优点是它提供基于属性的托管版本定制,而使用后者可能会加快构建速度。
使用 Dependency Management 插件管理依赖项
当你应用io.spring.dependency-management
插件时, Spring Boot 的插件将自动从你使用的 Spring Boot 版本导入spring-boot-dependencies
bom。
这提供了与 Maven 用户喜欢的依赖项管理体验类似的体验。
例如,它允许您在声明在 BOM 中管理的依赖项时省略版本号。
要使用此功能,请以通常的方式声明依赖项,但省略版本号:
-
Groovy
-
Kotlin
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")
}
自定义托管版本
应用依赖项管理插件时自动导入的 bom 使用属性来控制它所管理的依赖项的版本。
浏览 Spring Boot 参考中的依赖项版本属性部分,以获取这些属性的完整列表。spring-boot-dependencies
要自定义托管版本,请设置其相应的属性。
例如,要自定义由以下属性控制的 SLF4J 版本:slf4j.version
-
Groovy
-
Kotlin
ext['slf4j.version'] = '1.7.20'
extra["slf4j.version"] = "1.7.20"
每个 Spring Boot 版本都是针对一组特定的第三方依赖项进行设计和测试的。 覆盖版本可能会导致兼容性问题,应谨慎操作。 |
隔离使用 Spring Boot 的依赖项 Management
Spring Boot 的依赖项管理可以在项目中使用,而无需将 Spring Boot 的插件应用于该项目。
该类提供了一个常量,可用于导入 BOM,而无需知道其组 ID、构件 ID 或版本。SpringBootPlugin
BOM_COORDINATES
首先,将项目配置为依赖于 Spring Boot 插件,但不要应用它:
-
Groovy
-
Kotlin
plugins {
id 'org.springframework.boot' version '3.4.0' apply false
}
plugins {
id("org.springframework.boot") version "3.4.0" apply false
}
Spring Boot 插件对依赖项管理插件的依赖意味着你可以使用依赖管理插件,而不必声明对它的依赖。 这也意味着您将自动使用与 Spring Boot 使用的相同版本的依赖项管理插件。
应用依赖管理插件,然后将其配置为导入 Spring Boot 的 bom:
-
Groovy
-
Kotlin
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 Boot 插件所做的那样使用块来使代码不那么尴尬。
这种方法的缺点是它迫使我们指定依赖管理插件的版本:plugins
plugins {
java
id("org.springframework.boot") version "3.4.0" apply false
id("io.spring.dependency-management") version "1.1.6"
}
dependencyManagement {
imports {
mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
}
}
了解更多
要了解有关依赖项管理插件功能的更多信息,请参阅其文档。
使用 Gradle 的 bom 支持管理依赖项
Gradle 允许使用 bom 来管理项目的版本,方法是将其声明为 a 或 依赖项。
依赖项将 bom 中的版本视为建议,依赖项关系图中的其他版本和约束可能会导致使用 bom 中声明的依赖项版本以外的版本。
依赖项将 BOM 中的版本视为要求,它们将覆盖在依赖项图中找到的任何其他版本。platform
enforcedPlatform
platform
enforcedPlatform
该类提供了一个常量,可用于声明对 Spring Boot 的 bom 的依赖项,而无需知道其组 ID、工件 ID 或版本,如以下示例所示:SpringBootPlugin
BOM_COORDINATES
-
Groovy
-
Kotlin
dependencies {
implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
}
dependencies {
implementation(platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES))
}
平台或强制平台将仅限制已在其中声明的配置版本或从声明它的配置扩展而来的版本。 因此,可能需要在多个配置中声明相同的依赖项。
自定义托管版本
使用 Gradle 的 bom 支持时,您不能使用 properties from 来控制它管理的依赖项的版本。
相反,您必须使用 Gradle 提供的机制之一。
其中一种机制是解决策略。
SLF4J 的模块都在组中,因此可以通过配置该组中的每个依赖项以使用特定版本来控制其版本,如以下示例所示:spring-boot-dependencies
org.slf4j
-
Groovy
-
Kotlin
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 版本都是针对一组特定的第三方依赖项进行设计和测试的。 覆盖版本可能会导致兼容性问题,应谨慎操作。 |