Gradle - 覆盖包含的库中的依赖项(排除依赖项)

时间:2015-10-21 08:10:30

标签: android android-studio gradle

我有一些我在mutliple项目中使用的库。我在库中的代码与更多版本的库(旧版和新版)兼容。但是库中的更改与所有构建版本都不兼容。

我有一个较旧的项目,我目前不想更新到最新的构建工具版本,所以对于这个单项目,我想强制覆盖依赖项。

通常我会从库中排除依赖关系,如下所示:

compile ("com.doomonafireball.betterpickers:library:1.6.0") {
    exclude group: 'com.android.support', module: 'support-v4'
}

如何从本地库项目中排除依赖项?我试过了

compile project(':dialogs') {
    exclude group: 'com.afollestad.material-dialogs'
}

但是这不能编译......

修改

这是我的对话框库:

compile('com.afollestad.material-dialogs:core:0.8.4.2@aar') {
    transitive = true;
}
compile('com.afollestad.material-dialogs:commons:0.8.4.2@aar') {
    transitive = true;
}

这就是我尝试过的,但它不起作用:

 compile(project(':dialogs')) {
    exclude group: 'com.afollestad.material-dialogs'
}
compile 'com.afollestad:material-dialogs:0.7.8.1'

问题:它编译并运行,但我得到NoSuchMethod例外。当我只是注释掉0.8.4.2库行并将其替换为0.7.8.1行(所有在我的库中)时一切正常......

1 个答案:

答案 0 :(得分:6)

可能应该有所帮助: https://discuss.gradle.org/t/excluding-transitive-dependency-does-not-work-for-project-dependency/8719

  

这是一个语法问题。您正在调用exclude的闭包被解释为project()方法的参数,这是不正确的。应该是这样的:

compile(project(':baseproject')) {
    exclude group: 'com.miglayout'
}

看到编译用大括号包裹项目 <)