如何从 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 文件
Android Studio - Gradle 实现 (...) exclude ... 不起作用(无法从依赖项中排除组)