gradle構建指令碼
阿新 • • 發佈:2020-11-15
gradle構建指令碼
gradle構建指令碼檔案用來處理兩件事情,一個是專案另一個就是任務。
每個gradle生成表示一個或多個專案,一個專案表示一個JAR庫或web應用程式,也可能表示由其他專案產生的JAR檔案組裝的zip。
簡單的說:一個專案是由不同的任務組成。一個任務是指構建的一塊工作,任務可能是編譯一些類,建立一個JAR,產生Javadoc或釋出一些歸檔檔案。
編寫構建指令碼
gradle提供了一個域特定語言DSL,用於描述構建,它使用·Groovy語言,使其更容易形容和構建。gradle中的麼一個構建指令碼使用UFT8進行編碼,並命名為build.gradle。
建立build.gradle
我先在E盤建立一個安放gradle指令碼的資料夾。E:\project\gradle。
指令碼中定義一個任務名稱hello,指令碼名為build.gradle,內容如下。
task hello{
doLast{
println 'hello world'
}
}
然後在該目錄下執行gradle -q 任務名
gradle -q hello
並且在該目錄下生成了.gradle資料夾:
迴圈:相當於從0列印到3
輸出:
繼續修改指令碼:我去掉了hello任務中的doLast塊,並且在hello任務前添加了一個新的world任務。
執行:gradle -q world
build的三個階段
- initialization:gradle支援單個或多個工程的構建,在構建階段,gradle決定哪些工程參與到當前構建過程,併為每一個這一樣的工程建立一個project例項,一般情況下,參與構建的工程資訊將在setting.gradle中定義。
- configuration:在這一階段,配置project的例項,所有工程的構建指令碼都將被執行。Task,configuration和其他的物件都將被建立和配置。
- execution:在之前的配置階段,task的一個子集被建立並配置,這些子集來自於作為引數傳入gradle命令的task名字,在execution階段,這一子集將依次被執行。
doLast在execution階段執行,沒寫doLast的在configuration這一階段完成。
例如,下面的指令碼:
jdk語法支援
我們甚至可以在gradle中使用jdk的api以及一些語法:(不過貌似lambda表示式不支援)
task hello{
List<String> strs = Arrays.asList("aa","bb");
for(String str : strs){
System.out.println(str);
}
Map<Integer,String> map = new HashMap<>();
map.put(1,"a");
map.put(3,"b");
for(Integer key:map.keySet()){
System.out.println("key:"+key);
System.out.println("value:"+map.get(key));
}
println 'hello world'
}
執行:gradle -q hello
在一個檔案中可以同時存在java語法、gradle語法、scala語法。
我沒學過scala,這裡不再演示。