0

我开发了一个 Spring Boot 2.0.x 应用程序,它使用 Gradle 5.2.1 导入多个 Maven BOM,包括自定义和官方 Spring BOM。因此,我使用platformGradle 提供的语法。但是,我也将该dependency-management插件与 Spring Boot Gradle 插件结合使用。

apply plugin: 'io.spring.dependency-management'
apply plugin: 'org.springframework.boot'

dependencies {
    compile platform("org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}")
    compile platform("com.myOrg:custom-bom:${latestVersion}")
}

根据文档,这种插件组合触发了 Spring Boot BOM 文件的包含。但是,我不知道这个隐式包含的 BOM 如何适合 BOM 的常规顺序。它是首先应用,因此可以被其他 BOM 覆盖,还是最后应用,从而支配所有其他 BOM 文件?

4

1 回答 1

1

在仅platform用于 BOM 的 Gradle 世界中,没有优先规则。如果他们推荐不同的版本, Gradle 将考虑不同 BOM和传递依赖和冲突带来的所有约束,并以通常的方式解决它们。

我不是 Springdependency-management插件的专家,但我的理解是它旨在复制 Maven BOM 合同:BOM 的版本会否决任何传递版本,并且反过来可以被本地版本声明否决。

如果这种理解是正确的,那么dependency-management插件将对其导入的 BOM 所涵盖的所有依赖项应用其规则。插件未涵盖的任何内容都将遵守 Gradle 规则。

从这个意义上说,这种混合可能不是一个理想的情况,因为 BOM 内容在任何一个方向上的版本变化都可能对解决的依赖关系产生相当严重的影响。

于 2019-03-21T14:40:07.903 回答