隐式导入的Maven BOM文件在Gradle中占主导地位吗?

时间:2019-03-21 09:26:06

标签: spring spring-boot gradle maven-bom

我开发了一个Spring Boot 2.0.x应用程序,该应用程序使用Gradle 5.2.1导入多个Maven BOM表,包括自定义和正式的Spring BOM表。因此,我使用Gradle提供的platform语法。但是,我也将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}")
}

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

1 个答案:

答案 0 :(得分:1)

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

我不是Spring dependency-management插件的专家,但我的理解是它旨在复制Maven BOM合同:BOM的版本取代任何传递版本,并且可以由本地版本声明取代。

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

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