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 命令的任務).