在 Gradle 中,BOM 的顺序或声明依赖项的位置根本不重要。与使用最接近优先方法的 Maven 不同,Gradle 会考虑所有依赖信息并选择最高的。该文件指出
Gradle 将考虑所有请求的版本,无论它们出现在依赖图中的任何位置。在这些版本中,它将选择最高的版本。
一个实际的例子。以下声明将始终选择2.2.5.RELEASE
由 spring-cloud-dependencies BOM 版本定义的 Spring Cloud Gateway,Hoxton.SR8
无论哪个platform()
声明首先列出:
dependencies {
implementation platform('org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR8')
implementation platform('org.springframework.cloud:spring-cloud-dependencies:Greenwich.SR6')
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
}
依赖性洞察报告可能如下所示:
> gradlew -q dependencyInsight --dependency spring-cloud-starter-gateway
org.springframework.cloud:spring-cloud-starter-gateway:2.2.5.RELEASE (by constraint)
variant "compile" [
org.gradle.status = release (not requested)
org.gradle.usage = java-api
org.gradle.libraryelements = jar (compatible with: classes)
org.gradle.category = library (not requested)
Requested attributes not found in the selected variant:
org.gradle.dependency.bundling = external
org.gradle.jvm.version = 8
]
org.springframework.cloud:spring-cloud-starter-gateway:2.2.5.RELEASE
\--- org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR8
\--- compileClasspath
org.springframework.cloud:spring-cloud-starter-gateway -> 2.2.5.RELEASE
\--- compileClasspath
enforcedPlatform()
如果您更喜欢来自特定 BOM 的版本,您可以使用。