【问题标题】:gradle prefix exclude dependenciesgradle 前缀排除依赖项
【发布时间】:2020-07-27 01:47:57
【问题描述】:

在非常快速地开发 Hadoop 应用程序时,需要主 Hadoop 项目的许多子模块。 为了强制使用特定版本,作为我自己 Hadoop 作业的作者,我很乐意为可传递库更改 Hadoop 的版本。

即对于所有 hadoop-* 依赖项和传递依赖项,我想将它们设置为版本 foo.bar.baz

如何使用 Gradle 实现这一点而无需手动指定每个模块?

【问题讨论】:

    标签: gradle dependencies transitive-dependency


    【解决方案1】:

    您需要编写一个自定义依赖关系解析规则。例如:

    configurations.all {
        resolutionStrategy.eachDependency {
            if (requested.group == "org.apache.hadoop") {
                useVersion("3.2.1")
                because("some description why this version is needed.")
            }
        }
    }
    

    https://docs.gradle.org/current/userguide/resolution_rules.html

    上述方法的替代方法是创建/发布您自己的自定义platform 或“BOM”。

    【讨论】:

    • 是否也可以将其放入不同的范围并将此规则仅应用于特定的依赖项(以及它传递的任何内容)?
    【解决方案2】:

    如果您使用的是 Gradle 6+,我强烈建议您查看有关 dependency alignment 的专门章节,尤其是有关使用 virtual platforms 的部分。这与strict version constraint 相结合应该会给你你需要的结果。

    如果您需要支持更广泛的 Gradle 版本,Francisco Mateo 的解决方法是一种有效的方法。

    【讨论】:

    • 没有 gradle 6.2 - 如果需要,6.3 也可以。
    • 但是,要让strict 工作,我需要知道确切的冲突依赖项,并且我还需要枚举所有子模块,即在 hadoop 的情况下这是一个很大的数字。
    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    相关资源
    最近更新 更多