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

pro*_*m85 2 android gradle android-studio

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

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

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

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

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

compile project(':dialogs') {
    exclude group: 'com.afollestad.material-dialogs'
}
Run Code Online (Sandbox Code Playgroud)

但这不编译......

编辑

这是我的对话框库:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

 compile(project(':dialogs')) {
    exclude group: 'com.afollestad.material-dialogs'
}
compile 'com.afollestad:material-dialogs:0.7.8.1'
Run Code Online (Sandbox Code Playgroud)

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

Bam*_*ylo 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'
}
Run Code Online (Sandbox Code Playgroud)

看看用braces()编译包装项目