Gradle 入门
每个 Gradle 构建都以一个脚本开始。Gradle 构建脚本的默认命名规则是 build.gradle。在 shell 中执行 gradle 命令时,Gradle 会查找与该文件名相同的文件。如果找不到,运行时会显示帮助信息。
让我们设定一个崇高的目标,在 Gradle 中创建一个典型的 "Hello world! 首先,创建一个名为 build.gradle 的文件。在该脚本中,定义一个单一的原子工作。在 Gradle 的词汇中,这被称为任务。在本例中,任务名为 helloWorld。要打印消息 "Hello world!",可以使用 Gradle 的通用语言 Groovy,将 println 命令添加到任务的 doLast 操作中。println 方法是 Groovy 与 Java 的 System.out.println 相对应的方法:
task helloWorld {
doLast {
println 'Hello world!'
}
}
试一试:
$ gradle –q helloWorld
Hello world!
不出所料,运行脚本时会输出 "Hello world!"。通过用 -q 定义可选的命令行选项 quiet,你可以告诉 Gradle 只输出任务的输出。
不知不觉中,你已经使用了 Gradle 的 DSL。任务和动作是 Gradle 语言的重要元素。一个名为 doLast 的动作几乎可以自我表达。它是任务执行的最后一个动作。Gradle 允许以更简洁的方式指定相同的逻辑。左移操作符 <<
是 doLast 动作的快捷方式。下面的代码段是第一个例子的修改版:
task helloWorld << {
println 'Hello world!'
}
操作符 << 在 Gradle 4.x 中被弃用(deprecated),并且在 Gradle 5.0 被移除(removed)。 |
打印 “Hello world!” 仅此而已。 我将在下面的清单中显示的示例构建脚本中让您体验更高级的功能。 让我们通过进行一些小组治疗来增强我们对 Gradle 的信心。 跟着我重复一遍:Gradle 太棒了!
task startSession << {
chant()
}
def chant() {
ant.echo 'Repeat after me...' // 1 隐式 Ant 任务使用
}
3.times {
task "yayGradle$it" << { // 2 动态任务定义
println 'Gradle rocks'
}
}
// 3 任务依赖
yayGradle0.dependsOn startSession
yayGradle2.dependsOn yayGradle1, yayGradle0
task groupTherapy(dependsOn: yayGradle2)
您一开始可能没有注意到,但此列表中发生了很多事情。 您引入了关键字 dependsOn 来指示任务之间的依赖关系。 Gradle 确保所依赖的任务始终在定义依赖关系的任务之前执行。 在底层,dependsOn 实际上是一个任务的方法。 第 4 章将介绍任务的内部结构,因此我们不会在这里深入讨论太多细节。
我们之前讨论过的一个功能是 Gradle 与 Ant 的紧密集成。因为您可以完全访问 Groovy 的语言功能,所以您还可以在名为 chant() 的方法中打印消息。 可以从您的任务中轻松调用此方法。 每个脚本都配备了一个名为 ant 的属性,该属性允许直接访问 Ant 任务。 在此示例中,您使用 Ant 任务 echo 打印出消息 “Repeat after me” 以启动 therapy 会话。
Gradle 提供的一个很棒的功能是动态任务的定义,它在运行时指定它们的名称。 您的脚本使用 java.lang.Number 上的 Groovy times 方法扩展在循环中创建三个新任务。 Groovy 自动公开一个名为 it 的隐式变量来指示循环迭代索引。 您正在使用此计数器来构建任务名称。 对于第一次迭代,任务将称为 yayGradle0。
现在运行 gradle groupTherapy 会产生以下输出:
$ gradle groupTherapy
:startSession
[ant:echo] Repeat after me...
:yayGradle0
Gradle rocks
:yayGradle1
Gradle rocks
:yayGradle2
Gradle rocks
:groupTherapy

如图 2.10 所示,Gradle 按照正确的顺序执行了任务。你可能已经注意到,示例中省略了 quiet 命令行选项,而它可以提供更多有关任务运行的信息。
多亏了你的 therapy 组,让你摆脱了 "Gradle 只是另一个无法完成任务的构建工具" 的恐惧。在下一章中,你将建立一个完整的 Java 应用程序,它将广泛涵盖 Gradle 的核心概念。现在,让我们先熟悉一下 Gradle 的命令行。