Gradle多个编译依赖关系语法

Hri*_*nov 9 syntax configuration compilation gradle

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

configurations {
    compile.exclude group: 'com.google.gwt'
    all*.exclude group: 'com.google.guava'
}
Run Code Online (Sandbox Code Playgroud)

但这会影响所有配置.我想要的是这样的(这在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'
    }
Run Code Online (Sandbox Code Playgroud)

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

compile 'com.google.guava:guava:17.0'
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Pet*_*ser 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'
    }
]
Run Code Online (Sandbox Code Playgroud)

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

  • 它很少需要,因此Gradle没有为它提供特殊的语法.当然你总是可以做`def excludes = {exclude ...}`然后`编译'foo:bar:1.0",排除`. (2认同)