Gradle:一个像 Maven 的“最接近的优先”一样的解析策略?

Gradle: A ResolvingStrategy that would behave like Maven's `nearest first`?

提问人:Ondra Žižka 提问时间:4/16/2023 更新时间:4/16/2023 访问量:68

问:

我来到了 Gradle 构建的一组项目,其中只有在某些东西停止构建或出现臭名昭著的 CVE 时才会进行升级。这导致了非常广泛的不兼容版本,这些版本恰好不会因巧合而发生冲突(不会触发对缺失方法的调用等)。内部项目依赖关系树非常深,修复所有这些依赖关系树很困难。

在一个项目中,我设置了 Log4j API 的一个版本。这个工件经常破坏二进制兼容性,我在 2.17 和 2.18 之间击中了一个。

传递依赖项表示它需要 2.18,因此 Gradle 会遵守并忽略显式设置的项目版本,如此处所述

总的来说,我发现这是一个糟糕的策略,并希望切换到 ,它将有效地始终遵循项目明确要求的版本,或相同距离中的最高版本。nearest-highest

但是我看到 Gradle 在 ResolutionStrategy 中的选择非常有限,我只能从中以一种冗长的方式使用 :force

allprojects {
    // Log4j breaks binary compatibility even in the API, so we need to intervene.
    // Replacing Log4j is highly recommended!
    configurations.configureEach {
        resolutionStrategy {
            force 'org.apache.logging.log4j:log4j-api:2.17.2'
        }
    }
}

在我的特殊情况下,它是降级,所以我可以使用.但与此同时,这将限制最终工件的消费者,这是我不想要的 - 如果“他们”设法在其运行时将版本与 2.18 对齐,他们应该能够。strict

是否有一些 Gradle 插件可以添加更多选项?像这样,resolutionStrategy

    resolutionStrategy {
        useNearestHighest()
    }
gradle -管理 依赖项 解析器 依赖 -解析

评论


答: 暂无答案