具有模块排除的gradle依赖属性

时间:2017-08-30 19:15:17

标签: android gradle

我尝试为我的多模块项目编写中央依赖项文件

ext {
    supportVersion = '25.4.0'
    junitVersion = '4.12'

    supportDependencies = [
        design:            "com.android.support:design:${supportVersion}",
        fragment:          "com.android.support:support-fragment:${supportVersion}",
        recyclerView:      "com.android.support:recyclerview-v7:${supportVersion}"
    ]
    ...
}

在模块中使用它们

compile supportDependencies.design
compile supportDependencies.fragment
compile supportDependencies.recyclerView

但是有些依赖项要编译exclude

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

当我尝试写属性时

testingDependencies = [
        espresso:          ('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
]

我收到编译时语法错误

是否可以创建带有exclude的扩展的库属性,以便在模块中编译?

2 个答案:

答案 0 :(得分:0)

当然,您会收到语法错误。您必须使用Groovy语法。在第一个示例中,您可以简单地将Map String键定义为String值,然后使用这些字符串。

你可以。 G。而不是Map<String, String>定义Map<String, List>并在列表中首先放置依赖关系,在第二位放置为List<Map>,然后迭代该列表,添加排除。 (group: 'com.android.support', module: 'support-annotations'只是地图的语法糖,基本上你用方法exclude作为参数调用{/ 1}}

或者您可以完全更改为使用中央定义闭包来应用相应的依赖项,例如

Map

或类似的东西。

答案 1 :(得分:0)

通过添加中央依赖关系文件

解决了我的问题
ext {   
   espressoVersion = '3.0.1'

   testingDependencies = [
        espresso: "com.android.support.test.espresso:espresso-core:${espressoVersion}"
   ]
}

并在模块中

androidTestCompile(testingDependencies.espresso, {
    exclude group: 'com.android.support', module: 'support-annotations'
})

所以我还有一个带有使用过的依赖版本的文件,并且可以在所有模块中简单地更新版本