gradle命令
通過在命令行運(yùn)行 gradle 命令來執(zhí)行構(gòu)建,gradle 命令會(huì)從當(dāng)前目錄下尋找 build.gradle 文件來執(zhí)行構(gòu)建。build.gradle 文件為構(gòu)建腳本酵幕,嚴(yán)格來說這其實(shí)是一個(gè)構(gòu)建配置腳本妥凳。Gradle 腳本采用 Groovy 書寫
> gradle -q hello
Projects
任何一個(gè) Gradle 構(gòu)建都是由一個(gè)或多個(gè) projects 組成硅急。每個(gè) project 包括許多可構(gòu)建組成部分赊窥。
project 或許是一個(gè) jar 包或者一個(gè) web 應(yīng)用禀忆,它也可以是一個(gè)由許多其他項(xiàng)目中產(chǎn)生的 jar 構(gòu)成的 zip 壓縮包臊旭。一個(gè) project 不必描述它只能進(jìn)行構(gòu)建操作,它也可以部署你的應(yīng)用或搭建你的環(huán)境箩退。
tasks
每個(gè) project 都由多個(gè) tasks 組成离熏。每個(gè) task 都代表了構(gòu)建執(zhí)行過程中的一個(gè)原子性操作。如編譯戴涝,打包滋戳,生成 javadoc,發(fā)布到某個(gè)倉庫等操作啥刻。
task hello {
doLast {
println 'Hello world!'
}
}
更簡便的寫法
task hello {
println 'Hello world!'
}
任務(wù)依賴
在兩個(gè)任務(wù)之間指明依賴關(guān)系
task hello << {
print "Hello world!"
}
task intro(dependsOn: hello) << {
println "I'm Gradle"
}
延遲依賴
添加依賴 task 也可以不必首先聲明被依賴的 task
task taskX(dependsOn: 'taskY') << {
println 'taskX'
}
task taskY << {
println 'taskY'
}
動(dòng)態(tài)任務(wù)
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
任務(wù)操縱
一旦任務(wù)被創(chuàng)建后奸鸯,任務(wù)之間可以通過 API 進(jìn)行相互訪問。
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3
增加任務(wù)行為
doFirst 和 doLast 可以進(jìn)行多次調(diào)用可帽。他們分別被添加在任務(wù)的開頭和結(jié)尾府喳。當(dāng)任務(wù)開始執(zhí)行時(shí)這些動(dòng)作會(huì)按照既定順序進(jìn)行。其中 << 操作符 是 doLast 的簡寫方式蘑拯。
task hello << {
println 'Hello Earth'
}
hello.doFirst {
println 'Hello Venus'
}
hello.doLast {
println 'Hello Mars'
}
hello << {
println 'Hello Jupiter'
}
屬性訪問
task hello << {
println 'Hello world!'
}
hello.doLast {
println "Greetings from the $hello.name task."
}
自定義屬性
task myTask {
ext.myProperty = "myValue"
}
task printTaskProperties << {
println myTask.myProperty
}
默認(rèn)任務(wù)
Gradle 允許在腳本中定義多個(gè)默認(rèn)任務(wù)
defaultTasks 'clean', 'run'
task clean << {
println 'Default Cleaning!'
}
task run << {
println 'Default Running!'
}
task other << {
println "I'm not a default task!"
}
調(diào)用 Ant 任務(wù)
Ant 任務(wù)是 Gradle 中的一等公民钝满。Gradle 借助 Groovy 對 Ant 任務(wù)進(jìn)行了優(yōu)秀的整合兜粘。Gradle 自帶了一個(gè) AntBuilder,在 Gradle 中調(diào)用 Ant 任務(wù)比在 build.xml 中調(diào)用更加的方便和強(qiáng)大弯蚜。
task loadfile << {
def files = file('../antLoadfileResources').listFiles().sort()
files.each { File file ->
if (file.isFile()) {
ant.loadfile(srcFile: file, property: file.name)
println " *** $file.name ***"
println "${ant.properties[file.name]}"
}
}
}
方法抽取
task checksum << {
fileList('../antLoadfileResources').each {File file ->
ant.checksum(file: file, property: "cs_$file.name")
println "$file.name Checksum: ${ant.properties["cs_$file.name"]}"
}
}
task loadfile << {
fileList('../antLoadfileResources').each {File file ->
ant.loadfile(srcFile: file, property: file.name)
println "I'm fond of $file.name"
}
}
File[] fileList(String dir) {
file(dir).listFiles({file -> file.isFile() } as FileFilter).sort()
}