【问题标题】:Not able to remove transitive dependency from gradle in an Android Project无法从 Android 项目中的 gradle 中删除传递依赖
【发布时间】:2016-05-26 12:18:58
【问题描述】:

我正在尝试从我的 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:

还有谁能告诉我树中依赖项旁边的star (*) 符号代表什么?

更新 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 Support Annotations 传递依赖

【问题讨论】:

  • 这只是一个例子吗?因为你不能显式编译 v4 库
  • @cricket_007 是的,这只是一个例子。我有一个复杂的依赖树,但是如果可以解决这个简单的示例,那么我将能够解决复杂的树。
  • 你使用哪个 gradle 版本?在 2.13 上它可以正常工作。
  • @Crazyjavahacking 我正在使用classpath 'com.android.tools.build:gradle:2.1.0'
  • 为什么是那个版本? Android 需要吗?

标签: android android-studio gradle build.gradle gradle-dependencies


【解决方案1】:

所以我在一位朋友的帮助下解决了这个问题。我无法删除support-annotation 的原因是因为大多数其他依赖项都使用support-v4 作为传递依赖项,而那些support-v4 也有自己的support-annotation 副本。

现在有两种解决方案

解决方案 1:

从所有包含support-v4 作为传递依赖的依赖中排除support-annotation

解决方案 2:

仅从我的support-v4 依赖项中排除support-annotation,并从所有其他将support-v4 作为传递依赖项的依赖项中删除support-v4 依赖项。

注意:使用上述方法之一,我能够解决我的问题,并弄清楚当从多个依赖项中引用传递依赖项时,我们如何删除它们。

关于 ( * ) 符号,这意味着已经显示了该依赖项的依赖关系树。 gradle 不再为这些依赖项显示 整个树,而是显示 ( * ) 符号。

样本build.gradle 文件可用here

【讨论】:

  • 非常感谢。解决方案 2 对我有用。我在使用 gradle 项目时遇到了同样的问题。
【解决方案2】:

还有更优雅的解决方案:您可以在 build.gradle 文件中使用 configueation.all 块,如下例所示:

configurations.all {
  exclude group: 'com.android.support', module: 'support-annotations'
}

它应该排除应用程序中所有内部模块的所有传递依赖项。

【讨论】:

    猜你喜欢
    • 2018-05-10
    • 2016-05-04
    • 2020-12-25
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2018-10-18
    相关资源
    最近更新 更多