2015-10-21 201 views
1

我有一些库用于多项目。我在库中的代码与更多版本的库(旧版和新版)兼容。但是库中有与所有版本不兼容的更改。Gradle - 从包含库中覆盖依赖项(排除依赖项)

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

通常我不排除库的依赖就像下面:

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:[email protected]') { 
    transitive = true; 
} 
compile('com.afollestad.material-dialogs:commons:[email protected]') { 
    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线替换它(在我的库)一切工作正常...

+0

你有没有解决这个问题? – user1809913

+0

不......它没有找到方法,如果我这样做,所以我仍然注释掉手动代码... – prom85

回答

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' 
} 

请参阅编译包装项目用括号()

+0

你是对的,不知道我可以使用该语法为地方图书馆以及。现在工作,非常感谢你 – prom85

+0

我刚刚编辑我的问题...我仍然有一个问题。这不符合预期...任何进一步的想法或tipps? – prom85

+0

你能提供日志片段吗?我不清楚谁是谁,什么时候抛出NoSuchMethod – Sergey

相关问题