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

Posted

技术标签:

【中文标题】如何从 Gradle 中的所有依赖项中忽略特定的传递依赖项【英文标题】:How to ignore a specific transitive dependency from all dependencies in Gradle 【发布时间】:2013-11-28 05:37:39 【问题描述】:

如何在 Gradle 中忽略特定的传递依赖?

例如,许多库(例如 Spring 和 ...)依赖于 commons-logging,我想将 commons-logging 替换为 SLF4J(及其 jcl-over-slf4j 桥)。

是否可以在我的 gradle 脚本中提及一次,而不是针对每个依赖于 commons-logging 的依赖项?

我正在考虑一个脚本,迭代所有依赖项并在所有依赖项上添加一些exclude,有没有更好的解决方案?那个剧本怎么样?

【问题讨论】:

请尝试解析策略:***.com/questions/23124509/… 【参考方案1】:

带着同样的问题来到这里,但最终使用以下内容进行实际替换。为了完整起见发布它。

configurations.all 
    resolutionStrategy.eachDependency 
        if(it.requested.name == 'commons-logging') 
            it.useTarget 'org.slf4j:jcl-over-slf4j:1.7.7'
        
    

【讨论】:

感谢您的回答和 Gradle 在处理此类任务时的优雅。 我想补充一点,与此同时,一个新的 Gradle 版本已经发布,并且它具有模块替换功能。还没有尝试过,但看起来他们可能会做同样的事情。 为这个问题而来,找到了更好的答案。 ;)【参考方案2】:
configurations 
    compile.exclude group: 'commons-logging'

【讨论】:

或:configurations.all exclude group: 'commons-logging' 有没有办法排除特定版本的组?

以上是关于如何从 Gradle 中的所有依赖项中忽略特定的传递依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Android apk - 如何使用 gradle 从 3rd 方依赖项中排除 .so 文件

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

gradle - 依赖项中的库重复

从 Gradle 依赖项中排除 .class 文件

Android Studio - Gradle 实现 (...) exclude ... 不起作用(无法从依赖项中排除组)

如何排除从项目依赖项中扫描的 Spring bean?