我应该如何将项目依赖项添加到一组有限的子项目中?

时间:2014-09-18 21:20:22

标签: gradle

我想将一个项目依赖项添加到以特定名称开头的各个子项目中。

我试过这个

subprojects.findAll { project -> project.name.startsWith("myproject-sample") }.each { project ->
   dependencies {
      //compile project(":myproject-core")
   }
}

但它给出了

A problem occurred evaluating root project 'myproject'.

> Could not find method call() for arguments [:myproject-core] on project ':myproject-sample-hello-world'.

当我这样做时

subprojects {
   dependencies {
      compile project(":myproject-core")
   }
}
它似乎有效。但它将dep添加到所有子项目中。

如何将项目dep添加到一组有限的子项目中?

2 个答案:

答案 0 :(得分:2)

一个干净的解决方案是:

def sampleProjects = subprojects.findAll { it.name.startsWith("sample") }

configure(sampleProjects) {
    dependencies {
        compile project(":myproject-core")
    }
}

或者:

subprojects {
    if (project.name.startsWith("sample")) {
        dependencies {
            compile project(":myproject-core")
        }
    }
}

两个代码段都假设示例项目已经应用了java插件(否则在apply plugin: "java"阻止之前添加dependencies

答案 1 :(得分:0)

subprojects方法委托给每个子项目的Project接口的实例,这就是您的第二个示例有效的原因(Project有一个名为dependencies()的方法)。然而,each方法只是作为参数传递Project对象。然后,您需要在该对象上调用dependencies()方法。这需要简单的语法更改。

subprojects.findAll { project -> 
    project.name.startsWith("myproject-sample") 
}.each { project -> 
    project.dependencies {
        compile project(":myproject-core")
    }
}