管理依賴

要在 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 允許透過將其宣告為 platformenforcedPlatform 依賴來使用 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 版本都針對一組特定的第三方依賴進行了設計和測試。覆蓋版本可能會導致相容性問題,應謹慎操作。