在gradle构建脚本中将配置应用于特定项目

时间:2012-12-13 20:43:58

标签: groovy gradle

我有一个gradle项目,它包含java应用程序以及android应用程序。

root/
  build.gradle
  settings.gradle
  java1/
  java2/ 
  android1/
  android2/
  java3/

等。

构建构建脚本的最佳做法是什么?我是一个完全的gradle新手,我正在将项目从maven迁移到gradle。

我想做点什么而不是

configure(subprojects) {}

应用插件和其他特定的东西。

,例如

configure(java1, java2, java3) { // java specifics }
configure(android1, android2) { // android specifics }

我可能是以错误的方式接近这个。

更明确地说,我需要为java项目应用插件java,为android项目安装android插件。

5 个答案:

答案 0 :(得分:12)

configure(subprojects.findAll {it.name == "java1" && it.name == "java2"}) {

Under the filtering section in the guide

希望这有助于其他人。

答案 1 :(得分:7)

有多种方法,取决于你想要的......一些例子:

// Configures just project java1
project(":java1") { ... }

// Configures projects java1 and java2
["java1","java2"].each { name ->
  project(":$name") { ... }
}

您可以使用普通的groovy来查找/遍历所有项目。

答案 2 :(得分:4)

另一种选择:

configure([ project(':sub1'), project(':sub2'), ... ]) {
    ...
}

答案 3 :(得分:0)

最短且最简单的选择:

configure(subprojects.findAll()) {
   if (it.name.equals('MY_PROJECT')) {
     ...
   } else {
     ...
   }
}

答案 4 :(得分:0)

另一种方法......

在settings.gradle中,您可以像这样定义项目:

gradle.ext.javaProjects=[]
gradle.ext.androidProjects=[]

javaProject('java1')
javaProject('java2')
javaProject('java3')
androidProject('android1')
androidProject('android2')

def javaProject(String name) {
    gradle.ext.javaProjects.add(name)
    include ":$name"
}

def androidProject(String name) {
    gradle.ext.androidProjects.add(name)
    include ":$name"
}

现在您可以在root build.gradle中引用它们:

def javaProjects = subprojects.findAll {gradle.ext.javaProjects.contains(it.name)};
def androidProjects = subprojects.findAll {gradle.ext.javaProjects.contains(it.name)};

configure(javaProjects) {
...
}
configure(androidProjects) {
...
}

也许那太过分了......但我通常在我的settings.gradle中有项目定义方法。例如。如果你想把所有java项目放在一个java文件夹下,你可以定义这样的东西:

def javaProject(String name) {
    gradle.ext.javaProjects.add(name)
    include ":$name"
    project(":$name").projectDir = file('java/'+ name)
}