构建基础
Project 和 task:projects 和 tasks是 Gradle 中最重要的两个概念。
任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。 这完全取决于你要构建些什么。举个例子,每个 project 或许是一个 jar 包或者一个 web 应用,它也可以是一个由许多其他项目中产生的 jar 构成的 zip 压缩包。一个 project 不必描述它只能进行构建操作。它也可以部署你的应用或搭建你的环境。不要担心它像听上去的那样庞大。 Gradle 的 build-by-convention 可以让您来具体定义一个 project 到底该做什么。
每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。到目前为止,可以发现我们可以在一个 project 中定义一些简单任务,后续章节将会阐述多项目构建和多项目多任务的内容。
注意 << 在gradle 在5.1 之后废弃了
快速定义任务
task hello {
println 'Hello world!'
}
上面的脚本又一次采用闭包的方式来定义了一个叫做 hello 的任务,本文档后续章节中我们将会更多的采用这种风格来定义任务。
在 gradle 任务中采用 groovy
task upper {
String someString = 'mY_nAmE'
println "Original: " + someString
println "Upper case: " + someString.toUpperCase()
}
Output of gradle -q upper
> gradle -q upper
Original: mY_nAmE
Upper case: MY_NAME
或者
task count {
4.times { print "$it " }
}
Output of gradle -q count
> gradle -q count
0 1 2 3
任务依赖
你可以按如下方式创建任务间的依赖关系
在两个任务之间指明依赖关系
build.gradle
task hello {
println 'Hello world!'
}
task intro(dependsOn: hello) {
println "I'm Gradle"
}
延迟依赖
task taskX(dependsOn: 'taskY') {
println 'taskX'
}
task taskY {
println 'taskY'
}
可以看到,taskX 是 在 taskY 之前定义的,这在多项目构建中非常有用。
注意:当引用的任务尚未定义的时候不可使用短标记法来运行任务。
动态任务
借助 Groovy 的强大不仅可以定义简单任务还能做更多的事。例如,可以动态定义任务
4.times { counter ->
task "task$counter" {
println "I'm task number $counter"
}
}
Output of gradle -q task1
\> gradle -q task1
I'm task number 1
任务操纵
一旦任务被创建后,任务之间可以通过 API 进行相互访问。这也是与 Ant 的不同之处。比如可以增加一些依赖。
通过 API 进行任务之间的通信 - 增加依赖
4.times { counter ->
task "task$counter" {
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3
.....等等