【问题标题】:Are implicitly imported Maven BOM files dominant in Gradle?Gradle 中隐式导入的 Maven BOM 文件是否占主导地位?
【发布时间】:2023-03-05 02:20:02
【问题描述】:

我开发了一个 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 文件?

【问题讨论】:

    标签: spring spring-boot gradle maven-bom


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的澄清。我已经尝试过使用插件和 BOM 的不同组合,您的假设似乎是正确的。此外,我发现当我使用 enforcePlatform 包含 Spring Boot BOM 而无需插件时,我收到了类似的结果。
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    相关资源
    最近更新 更多