Gradle多个编译依赖关系语法

时间:2014-05-07 04:14:34

标签: syntax configuration compilation gradle

我试图在Gradle 1.12中声明一个编译依赖项,其中多个项目共享相同的exclude子句(这是为了避免在任何地方重复排除)。我知道我可以这样做:

configurations {
    compile.exclude group: 'com.google.gwt'
    all*.exclude group: 'com.google.guava'
}

但这会影响所有配置。我想要的是这样的(在Gradle 1.12中不起作用,如下所示):

compile (
         ["org.jboss.errai:errai-data-binding:2.4.4.Final"]
        ,["org.jboss.errai:errai-data-ioc:2.4.4.Final"]
    ){
        exclude group: 'com.google.gwt' 
        exclude group: 'com.google.guava'
    }

所以我可以把我需要排除的所有依赖项集中在一个地方,并且仍然可以在其他地方:

compile 'com.google.guava:guava:17.0'

更新 只是为了澄清,我唯一的目标是替换这段代码:

compile ('bla.bla.bla:1.0'){
  exclude 'same.component:1.0' //Ugly repeat
}
compile ('boo.boo.boo:1.0'){
  exclude 'same.component:1.0' //Ugly repeat
}
compile ('uh.uh.uh:1.0'){
  exclude 'same.component:1.0' //Ugly repeat
}
compile ('oh.oh.oh:1.0'){
  exclude 'same.component:1.0' //Ugly repeat
}

像这样短暂而甜蜜(目前不工作):

compile( 'bla.bla.bla:1.0'
        ,'boo.boo.boo:1.0'
        ,'uh.uh.uh:1.0'
        ,'oh.oh.oh:1.0'
)
{
    exclude 'same.component:1.0' //Only once! Sweet!
}

1 个答案:

答案 0 :(得分:6)

在仍然能够使用compile 'com.google.guava:guava:17.0'语法的情况下,无法将每个依赖项排除在外。 configurations.compile.exclude ...只会影响compile配置(以及从中继承的配置),并且几乎总是优先于每个依赖项排除。

另一种解决方案是将依赖性声明分解为:

ext.libs = [
    error_data_ioc: dependencies.create("org.jboss.errai:errai-data-ioc:2.4.4.Final") {
        exclude group: 'com.google.gwt' 
        exclude group: 'com.google.guava'
    }
]

然后,您可以在任何需要的地方重用这些声明(例如dependencies { compile libs.error_data_io };也可以从子项目开始工作)。如果你真的想要,你也可以在多个声明中共享相同的{ exclude ... }块(通过将它分配给局部变量)。