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

问题描述:

我想将特定项目依赖项添加到以特定名称开头的各个子项目中。我应该如何将一个项目依赖项添加到一组有限的子项目中?

我想这

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添加到一组有限的子项目中?

一个干净的解决方案是:

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插件dependencies块之前(否则添加apply plugin: "java" )。

subprojects方法委托给Project接口每个子项目,这就是为什么你的第二个示例工作的一个实例(Project有一个名为dependencies()方法)。然而,each方法只是通过Project对象作为参数。然后您需要调用该对象上的dependencies()方法。这需要一个简单的语法变化。

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