Gradle腳本基礎
Gradle中所有的東西都是基于兩個概念:tasks和projects,每一個Gradle構建都是有一個或多個projects組成的。
project的概念比較廣泛,具體看你在Gradle中是怎么定義的,它可能代表一個jar包或者一個Web
應用,也可能代表由其他project的jar包組成的分布式zip文件。project不僅可以代表一個將要編譯的東西,它還可以代表即將要完成的事
情,比如部署你的應用到生產環境。每一個projcet都是有一個或多個tast組成,一個task代表一個編譯操作的一些原子操作,比如編譯一些
class,創建一個jar包,生成java文檔等,下面是我學習Gradle向導筆記
1.簡短的task定義
task hello << {
println 'Hello world!'
}
2.Gradle腳本中執行代碼
task upper << {
String s = "my name is wangliqiang"
println "origin : "+s
println "upper: "+s.toUpperCase()
}
輸出:
origin : my name is fanfanxiaozu
upper: MY NAME IS FANFANXIAOZU
3.Gradle中一個task可以依賴另一個task
task first << {
println "I am first "
}
task second(dependsOn:first) << {
println "I am second,and i depend on first"
}
輸出:
I am first
I am second,and i depend on first
如果定義依賴的時候,被依賴的task還沒有定義則需要加引號來使用,否則會報錯
task second(dependsOn:'first') << {
println "I am second,and i depend on first"
}
task first << {
println "I am first "
}
4.動態定義task,下面代碼表示動態定義6個task0-task5,當執行gradle -q task5 時會打印出“i am task 5”
6.times{i ->
task "task$i" << {
println "i am task $i"
}
}
5.使用已有的task
對task動態添加依賴
6.times{i ->
task "task$i" << {
println "i am task $i"
}
}
task0.dependsOn task5,task3,task2
執行gradle task0
輸出:
i am task 2
i am task 3
i am task 5
i am task 0
task hello << {
println 'hello,fanfanxiaozu'
}
hello.doFirst{
println 'hello,fanfanxiaozu,before'
}
hello.doFirst{
println 'hello,fanfanxiaozu,before1'
}
hello.doLast{
println 'hello,fanfanxiaozu,after'
}
hello << {
println 'hello,fanfanxiaozu,after1'
}
輸出:
hello,fanfanxiaozu,before1
hello,fanfanxiaozu,before
hello,fanfanxiaozu
hello,fanfanxiaozu,after
hello,fanfanxiaozu,after
doFirst和doLast可以執行很多次,該命令是向action list中的開始和末尾添加其他action,<< 是doLast的別名。
task fanfanxiaozu << {
println 'hello,fanfanxiaozu'
}
fanfanxiaozu.doFirst{
println "access task ,$fanfanxiaozu.name"
}
輸出:
access task ,fanfanxiaozu
hello,fanfanxiaozu
7.為task添加自定義的屬性
task fanfanxiaozu {
ext.age = "young"
}
task printTaskProperties << {
println "access task ,$fanfanxiaozu.age"
}
輸出 :
access task ,young
8.使用方法
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()
}
9.定義default task,這里需要指出的是如果一個子工程沒有定義default task,會使用它父工程的default task(假如定 義的話)
defaultTasks 'fanfanxiaozu','fly'
task fanfanxiaozu << {
println 'i am default task fanfanxiaozu'
}
task fly << {
println 'i am default task fly'
}
println 'i am not default tast'
}
執行gradle -q 輸出:
i am default task fanfanxiaozu
i am default task fly
10.Gradle有配置階段和執行階段,在執行完配置階段后,Gradle知道所有應該被執行的task。Gradle提供了一個鉤子來使用這個信息, 一個常用的例子是檢查release task是否在即將被執行的task里面,而起根據此接口,你可以給一些變量賦予不同的值。
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'
}
}
> gradle -q distribution
We build the zip with version=1.0-SNAPSHOT
> gradle -q release
We build the zip with version=1.0
We release now
一個比較重要的點是whenReady鉤子影響了release task的執行
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!