管理依赖
要在 Spring Boot 应用中管理依赖,您可以应用 io.spring.dependency-management
插件或使用 Gradle 原生的 BOM 支持。前者的主要优点是提供基于属性的托管版本定制,而后者通常会带来更快的构建速度。
使用依赖管理插件管理依赖
当您应用 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")
}
定制托管版本
应用依赖管理插件时自动导入的 spring-boot-dependencies
bom 使用属性来控制其托管的依赖版本。请浏览 Spring Boot 参考文档中的依赖版本属性部分,以获取这些属性的完整列表。
要定制托管版本,您可以设置其对应的属性。例如,要定制由 slf4j.version
属性控制的 SLF4J 版本
-
Groovy
-
Kotlin
ext['slf4j.version'] = '1.7.20'
extra["slf4j.version"] = "1.7.20"
每个 Spring Boot 版本都针对一组特定的第三方依赖进行了设计和测试。覆盖版本可能会导致兼容性问题,应谨慎操作。 |
独立使用 Spring Boot 的依赖管理
Spring Boot 的依赖管理可以在项目中独立使用,而无需在该项目上应用 Spring Boot 插件。SpringBootPlugin
类提供了一个 BOM_COORDINATES
常量,可用于导入 bom,而无需知道其 group ID、artifact ID 或版本。
首先,配置项目依赖于 Spring Boot 插件,但不应用它
-
Groovy
-
Kotlin
plugins {
id 'org.springframework.boot' version '3.4.5' apply false
}
plugins {
id("org.springframework.boot") version "3.4.5" 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.5" apply false
id("io.spring.dependency-management") version "1.1.7"
}
dependencyManagement {
imports {
mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
}
}
了解更多
要了解有关依赖管理插件功能的更多信息,请参阅其文档。
使用 Gradle 的 BOM 支持管理依赖
Gradle 允许通过将其声明为 platform
或 enforcedPlatform
依赖来使用 BOM 管理项目的版本。platform
依赖将 BOM 中的版本视为建议,依赖图中的其他版本和约束可能会导致使用 BOM 中声明版本以外的依赖版本。enforcedPlatform
依赖将 BOM 中的版本视为要求,它们将覆盖依赖图中找到的任何其他版本。
SpringBootPlugin
类提供了一个 BOM_COORDINATES
常量,可用于声明对 Spring Boot BOM 的依赖,而无需知道其 group ID、artifact ID 或版本,如下例所示
-
Groovy
-
Kotlin
dependencies {
implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
}
dependencies {
implementation(platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES))
}
platform 或 enforced platform 只会约束在其声明的配置中或从其声明的配置中扩展的配置的版本。因此,可能需要在多个配置中声明相同的依赖。
定制托管版本
使用 Gradle 的 BOM 支持时,您不能使用 spring-boot-dependencies
的属性来控制其托管的依赖版本。相反,您必须使用 Gradle 提供的一种机制。其中一种机制是 resolution strategy。SLF4J 的模块都在 org.slf4j
group 下,因此可以通过配置该 group 下的每个依赖来使用特定版本,如下例所示
-
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 版本都针对一组特定的第三方依赖进行了设计和测试。覆盖版本可能会导致兼容性问题,应谨慎操作。 |