如何从所有依赖项中排除模块,但保留显式声明Gradle

时间:2015-10-18 11:27:12

标签: android android-studio gradle android-gradle android-support-library

我正在努力解决问题,

我在我的Android应用程序的build.gradle文件中声明了一些依赖项,但问题是很多这些依赖项使用相同的compat库,在我的情况下appcompat-v7
可以为每个依赖项排除此库

compile ('com.github......'){
    exclude group: 'com.android.support', module: 'appcompat-v7'
}

但我需要为每个依赖性做这个 另一种方法是使用这样的表达式

configurations {
    compile.exclude module: 'appcompat-v7'
}

这样可行,但即使明确声明此库,也会忽略compile 'com.android.support:appcompat-v7:+'

我需要的只是为整个应用程序只包含一次这个库,因为如果编译时没有排除它会显示很多错误,例如has been already defined
也许有一种更简单的方法来实现这一点。我将非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

我们在gradle中使用提供的配置(因此当我们gradle:eclipse时,包括包,但在编译到jar时不包括,因为这些jar应该在运行时提供)。此配置如下所示:

configurations {
  provided {
    dependencies.all {dep ->
       configurations.default.exclude group: dep.group, module:dep.name
    }
  }
  compile.extendsFrom provided
}

这允许我们按如下方式包含依赖项:

dependencies {
    compile("org.scala-lang:scala-library:2.11.7")
    compile("org.scala-lang:scala-compiler:2.11.7")
    provided("org.apache.spark:spark-core_2_11:2.0.0")
}

尝试创建一个配置,其中包含要排除appcompat-v7的所有依赖项,然后从此新配置扩展编译。