Gradle 里的任何东西都是基于这两个基础概念:
projects ( 项目 )
tasks ( 任务 )
一、入手项目,hello world:
1、在目录中新建build.gradle 的文件
2、在文件中写入
task hello {
doLast {
println 'Hello world!'
}
}
3、在命令行里, 进入脚本所在的文件夹然后输入 gradle -q hello 来执行构建脚本。意思就是让gradle执行名为hello的task。-q 代表 quiet 模式. 它不会生成 Gradle 的日志信息 (log messages), 所以用户只能看到 tasks 的输出
二、用闭包形式修改helloworld
task hello << {
println 'Hello world!'
}
与前面的例子比较, doLast 被替换成了 <<. 它们有一样的功能, 但看上去更加简洁了
其他闭包例子:
task upper << {
String someString = 'mY_nAmE'
println "Original: " + someString
println "Upper case: " + someString.toUpperCase()
}
三、一些常用语法形式
1、循环
task count << {
4.times { print "$it " }
}
输出:
> gradle -q count
0 1 2 3
2、依赖,应该是无task的先后顺序
task taskX(dependsOn: 'taskY') << {
println 'taskX'
}
task taskY << {
println 'taskY'
}
gradle -q taskX 命令的输出
> gradle -q taskX
taskY
taskX
或者可以在参数外声明,加入一个依赖
task taskX << {
println 'taskX'
}
task taskY << {
println 'taskY'
}
taskX.dependsOn taskY,otherTask
3、动态任务
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
创建了4个名字不同的任务 task0, task1, task2, task3
gradle -q task1 命令的输出
> gradle -q task1
I'm task number 1
4、加入行为
task hello << {
println 'Hello Earth'
}
hello.doFirst {
println 'Hello Venus'
}
hello.doLast {
println 'Hello Mars'
}
hello << {
println 'Hello Jupiter'
}
gradle -q hello 命令的输出
> gradle -q hello
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter
doFirst 和 doLast 可以被执行许多次. 他们分别可以在任务动作列表的开始和结束加入动作. 当任务执行的时候, 在动作列表里的动作将被按顺序执行. 这里第四个行为中 << 操作符是 doLast 的简单别称.
5、短标记法
有一个短标记 $ 可以访问一个存在的任务. 也就是说每个任务都可以作为构建脚本的属性:
task hello << {
println 'Hello world!'
}
hello.doLast {
println "Greetings from the $hello.name task."
}
gradle -q hello 命令的输出
> gradle -q hello
Hello world!
Greetings from the hello task.
name 是任务的默认属性, 代表当前任务的名称, 这里是 hello.
6、自定义任务属性
task myTask {
ext.myProperty = "myValue"
}
task printTaskProperties << {
println myTask.myProperty
}
gradle -q printTaskProperties 命令的输出
> gradle -q printTaskProperties
myValue
7、定义使用方法
File[] fileList(String dir) {
file(dir).listFiles({file -> file.isFile() } as FileFilter).sort()
}
使用方法
task checksum << {
fileList('../antLoadfileResources').each {File file ->
ant.checksum(file: file, property: "cs_$file.name")
println "$file.name Checksum: ${ant.properties["cs_$file.name"]}"
}
}
8、默认任务
defaultTasks 'clean', 'run'
task clean << {
println 'Default Cleaning!'
}
task run << {
println 'Default Running!'
}
task other << {
println "I'm not a default task!"
}
gradle -q 命令的输出
> gradle -q
Default Cleaning!
Default Running!
9、通过 DAG 配置
Gradle 有一个配置阶段和执行阶段. 在配置阶段后, Gradle 将会知道应执行的所有任务. Gradle 为你提供一个"钩子", 以便利用这些信息.
task distribution << {
println "We build the zip with version=$version"
}
task release(dependsOn: 'distribution') << {
println 'We release now'
}
gradle.taskGraph.whenReady {taskGraph ->
if (taskGraph.hasTask(release)) {
version = '1.0'
} else {
version = '1.0-SNAPSHOT'
}
}
最重要的是 whenReady 在 release 任务执行之前就已经影响了 release 任务. 甚至 release 任务不是首要任务 (i.e., 首要任务是指通过 gradle 命令的任务).