13

我有一个包含 java 应用程序和 android 应用程序的 gradle 项目。

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 插件。

4

5 回答 5

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

在指南中的过滤部分下

希望这可以帮助其他人。

于 2012-12-13T22:32:06.003 回答
9

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

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

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

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

于 2012-12-13T22:50:27.243 回答
2

另外一个选项:

configure([ project(':sub1'), project(':sub2'), ... ]) {
    ...
}
于 2013-11-21T21:17:16.587 回答
0

最短和最简单的选择:

configure(subprojects.findAll()) {
   if (it.name.equals('MY_PROJECT')) {
     ...
   } else {
     ...
   }
}
于 2014-06-29T01:28:44.587 回答
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"
}

现在您可以在根 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)
}
于 2018-02-01T15:09:19.633 回答