Rob*_*ann 5 dependency-management gradle maven-bom gradle-dependencies
我目前正在开发一个 Gradle 5 项目,该项目导入两个不同的 Maven BOM。因此,我使用没有依赖管理插件的原生 Gradle 语法。但是,两个 BOM 可能会为相同的依赖项定义不同的版本。
dependencies {
implementation platform ("org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}")
implementation platform ("com.organisation:xyz:${otherBomVersion}")
}
Run Code Online (Sandbox Code Playgroud)
据我所知,在 Maven 中,定义给定依赖项的版本的第一个 BOM 决定了它。相比之下,在Gradle 依赖管理插件中,为给定依赖定义版本的最后一个 BOM 决定了它。
在纯 Gradle 5 中如何处理导入的 BOM 的顺序?
BOM 的顺序或声明依赖项的位置在 Gradle 中根本不重要。与 Maven 使用最近优先方法不同,Gradle 会考虑所有依赖信息并选择最高的依赖信息。文档指出
Gradle 将考虑所有请求的版本,无论它们出现在依赖关系图中的任何位置。在这些版本中,它将选择最高的版本。
一个实际的例子。无论首先列出哪个声明,以下声明将始终选择2.2.5.RELEASE
由 spring-cloud-dependency 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'
}
Run Code Online (Sandbox Code Playgroud)
依赖性洞察报告可能如下所示:
> 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
Run Code Online (Sandbox Code Playgroud)
enforcedPlatform()
如果您更喜欢特定 BOM 中的版本,则可以使用。
归档时间: |
|
查看次数: |
321 次 |
最近记录: |