打開build.gradle
文件,並在末尾添加如下內容:閉包
println "1" task howdy { println "2" doLast { println "Howdy" } }
println "3"
這將演示有關Gradle腳本如何工做的一些信息。使用如下命令運行它:gradle
./gradlew howdy
ui
您將看到(省略了一些多餘的行):插件
> Configure project : 1 2 3 > Task :howdy Howdy
在這裏,Configure project
任務將生成並運行生成腳本。在Gradle執行Configure project
任務時,它會執行如下操做:命令行
它打第一個println
並打印「1」
它找到要執行的howdy
任務定義塊,一個閉包,並顯示「2」。請注意,它不會執行doLast
關閉操做,所以還沒有打印「Howdy」。
它繼續執行腳本,直到第四個println
,而後打印「3」。
至此,構建腳本自己已完成對構建環境的配置。下一步是執行命令行中指定的全部任務,在本例中爲howdy
任務。code
這是task.doLast{}
執行塊的地方,所以您會在輸出中看到「Howdy」字樣。繼承
doLast
是該塊的別稱;它的真正含義是相似於「任務操做」,而外部塊是任務配置。文檔
task howdy { // 始終在初始構建腳本配置期間執行 doLast { // 僅在任務自己被調用時執行 } // 始終在初始構建腳本配置期間執行 }
使用Graovy DSL根據Gradle文檔定義任務的各類方法以下:get
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文檔,很是有幫助。