1. 程式人生 > 實用技巧 >gradle構建指令碼

gradle構建指令碼

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,這裡不再演示。