創建自定義任務
打開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的直線型接口測試框架初探