Gradle,如何禁用所有传递依赖

Posted

技术标签:

【中文标题】Gradle,如何禁用所有传递依赖【英文标题】:Gradle, How To Disable All Transitive Dependencies 【发布时间】:2013-07-22 20:35:14 【问题描述】:

我的许多 jar 都具有冲突的传递依赖项(多个 spring 版本)。我想通过显式管理我的所有依赖项来避免继承的版本冲突,是否可以禁用 Gradle 中的所有传递依赖项?

我知道我可以将transitive = false 添加到我的每个依赖项中,但我希望有更简单的方法。

compile(group: 'org.springframework', name: 'spring', version: '2.5.2') 
    transitive = false

【问题讨论】:

【参考方案1】:

就我而言,我有一个项目(gradle 模块)依赖。我使用以下内容来排除 Gradle 3 中的传递依赖:

implementation(project(':<module_name>')) 
    transitive = false

或者在 Kotlin 脚本中:

implementation(project(':<module_name>')) 
    isTransitive = false

【讨论】:

【参考方案2】:

如果您希望所有配置都只有一个配置块,您可以使用扩展点运算符来表达这一点。

configurations 
    // other configurations e.g. - compile.exclude module: 'commons-logging'
    all*.transitive = false

【讨论】:

【参考方案3】:

我最终使用了:

configurations.all 
    transitive = false

【讨论】:

另一种解决方案是告诉 Gradle 在版本冲突时失败并显式解决 那些(而不是显式管理所有传递依赖项)。 如果您对自己的答案感到满意,您应该接受它,以便将问题标记为已回答。 @PeterNiederwieser 您必须等待 48 小时才能接受您自己的答案。

以上是关于Gradle,如何禁用所有传递依赖的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Gradle 中的所有依赖项中忽略特定的传递依赖项

Gradle:获取传递依赖项并导出到最小的运行时 fat jar

使用 gradle 未解决 aar 库的传递依赖关系

使用 gradle 未解决 aar 库的传递依赖关系

Gradle - 排除嵌套的传递依赖

Android Gradle 插件Android 依赖管理 ⑤ ( Gradle 依赖优化 | 命令行查看依赖模块 | 依赖冲突问题 | 依赖传递冲突 | 分库冲突 | 依赖分组不同导致冲突 )