Gradle+Groovy提高篇
建立自定義任務
開啟build.gradle
檔案,並在末尾新增以下內容:
println "1"
task howdy {
println "2"
doLast {
println "Howdy"
}
}
println "3"
這將演示有關Gradle指令碼如何工作的一些資訊。使用以下命令執行它:
./gradlew howdy
您將看到(省略了一些多餘的行):
> Configure project :
1
2
3
> Task :howdy
Howdy
在這裡,Configure project
任務將生成並執行生成指令碼。在Gradle執行Configure project
它打第一個println
並列印“1”
它找到要執行的howdy
任務定義塊,一個閉包,並顯示“2”。請注意,它不會執行doLast
關閉操作,因此尚未列印“Howdy”。
它繼續執行指令碼,直到第四個println
,然後列印“3”。
至此,構建指令碼本身已完成對構建環境的配置。下一步是執行命令列中指定的所有任務,在本例中為howdy
任務。
這是task.doLast{}
執行塊的地方,因此您會在輸出中看到“Howdy”字樣。
doLast
是該塊的別稱;它的真正含義是類似於“任務操作”,而外部塊是任務配置。
task howdy { // 始終在初始構建指令碼配置期間執行 doLast { // 僅在任務本身被呼叫時執行 } // 始終在初始構建指令碼配置期間執行 }
使用Graovy DSL根據Gradle文件定義任務的各種方法如下:
task taskName
task taskName { configure closure }
task taskName(type: SomeType)
task taskName(type: SomeType) { configure closure }
只是為了錘鍊,在執行構建指令碼時立即執行“配置閉包”,而在doLast
專門執行任務時執行在配置閉包中定義的閉包。
將第二個自定義任務新增到build.gradle
檔案:
task partner { println "4" doLast { println "Partner" } } println "5"
如果您./gradlew partner
看到的是:
> Configure project :
1
2
3
4
5
> Task :partner
Partner
如果您希望一個自定義任務依賴另一個任務怎麼辦?這簡單。build.gradle
在定義兩個自定義任務之後,將以下行新增到檔案中的某處。
partner.dependsOn howdy
並執行:./gradlew partner
...
> Task :howdy
Howdy
> Task :partner
Partner
您也可以使用task屬性表示類似的關係finalizedBy。如果將dependsOn行替換為:
howdy.finalizedBy partner
並執行:/gradlew howdy
。
...
> Task :howdy
Howdy
> Task :partner
Partner
您得到相同的輸出。當然,他們表達不同的關係。
關於任務的最後一點:在實踐中,您很少編寫自定義任務來說諸如“Howdy Partner”之類的東西(我很難相信,我知道)。實際上,通常您會覆蓋已經定義的任務型別。例如,Gradle定義了Copy一個將檔案從一個位置複製到另一個位置的任務。
這是一個將文件複製到構建目標的示例:
task copyDocs(type: Copy) {
from 'src/main/doc'
into 'build/target/doc'
}
當您意識到build.gradle
檔案實際上是一個Groovy指令碼時,就可以使用Groovy和Gradle的真正功能,如果需要,您可以執行任意程式碼來過濾和轉換這些檔案。
下面的任務轉換每個副本檔案並排除.DS_Store
檔案。DSL非常靈活。您可以使用from
和多個塊excludes
,也可以執行諸如重新命名檔案或專門包含檔案之類的操作。再次檢視“複製”任務的文件以獲取更完整的想法。
task copyDocs(type: Copy) {
from 'src/main/doc'
into 'build/target/doc'
eachFile { file ->
doSomething(file);
}
exclude '**/.DS_Store'
}
我在Gradle Jar或中最重視War的任務是負責打包.jar
和.war
檔案以進行最終分發的任務。像Copy
任務一樣,他們具有定製過程的非常開放的能力,這對於需要定製最終產品的專案可能是巨大的幫助。實際上,您可以使用Gradle DSL來完全控制打包過程的各個方面。
Spring Boot外掛的bootJar
和bootWar
任務繼承自Jar
和War
任務,因此它們包括所有配置選項,包括複製,過濾和修改檔案的能力以及自定義清單的能力。
提高篇到此結束,大家要是有興趣歡迎去Gradle官網檢視API文件,非常有幫助。
- 鄭重宣告:文章禁止第三方(騰訊雲除外)轉載、發表,事情原委測試窩,首頁抄我七篇原創還拉黑,你們的良心不會痛嗎?
技術類文章精選
- java一行程式碼列印心形
- Linux效能監控軟體netdata中文漢化版
- 介面測試程式碼覆蓋率(jacoco)方案分享
- 效能測試框架第二版
- 如何在Linux命令列介面愉快進行效能測試
- 圖解HTTP腦圖
- 將swagger文件自動變成測試程式碼
- 五行程式碼構建靜態部落格
- 基於java的直線型介面測試框架初探
非技術文章精選
- 為什麼選擇軟體測試作為職業道路?
- 寫給所有人的程式設計思維
- 成為優秀自動化測試工程師的7個步驟
- 成為自動化測試的7種技能
- 自動化測試生命週期
- 如何在DevOps引入自動化測試
- Web端自動化測試失敗原因彙總
- 如何在DevOps引入自動化測試
- 測試人員如何成為變革的推動者
- 編寫測試用例的技巧