我正在尝试从我的 Android 项目中删除传递依赖项,但由于某些原因,当我尝试从我的特定依赖项中删除一个依赖项时,exclude
不起作用。
例如我想从我的项目中删除support-annotations
如果我用
configurations {
all*.exclude group: 'com.android.support', module:'support-annotations'
}
依赖项被排除并从依赖项树中移除。我可以使用 ./gradlew app:dependencies 查看依赖关系树
但是如果我用
compile('com.android.support:support-v4:23.4.0')
{
exclude group: 'com.android.support', module:'support-annotations'
}
所以我的问题是,为什么当我尝试从特定依赖项中删除依赖项时它不起作用?
更新 1:
谁能告诉我树中依赖项旁边的星
(*) 符号代表什么?
更新 2
我也在用 Fresco我用 Fresco 尝试了同样的事情,exclude
rule 似乎适用于它
Fresco 的依赖树|
当我在 Fresco 中排除 imagepipeline-base
时的依赖树
compile("com.facebook.fresco:fresco:0.9.0")
{
exclude group: 'com.facebook.fresco', module: 'imagepipeline-base'
}
如您所见,imagepipeline-base
依赖项被排除在外。 所以我不知道为什么这对 Android 支持注释传递依赖不起作用
最佳答案
所以我在一位 friend 的帮助下解决了这个问题。我无法删除 support-annotation
的原因是因为大多数其他依赖项都使用 support-v4
作为传递依赖项,而那些 support-v4
也有自己的 support-annotation
副本。
现在有两种解决方法
解决方案一:
从所有包含support-v4
的依赖项中排除support-annotation
作为传递依赖项。
解决方案二:
仅从我的 support-v4
依赖项中排除 support-annotation
并从具有 的所有其他依赖项中删除
作为传递依赖。support-v4
依赖项支持-v4
注意:使用上述方法之一,我能够解决我的问题,并弄清楚当从多个依赖项引用它们时我们如何删除传递依赖项。
关于 ( * ) 符号,它意味着已经显示了该依赖项的依赖树。 gradle 不再显示这些依赖项的整棵树,而是显示带有它们的( * ) 符号。
示例 build.gradle
文件可用 here
关于android - 无法从 Android 项目中的 gradle 中删除传递依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37460667/