這一系列文章是寫給剛開始使用Gradle,並且對Groovy語法不是特別瞭解的Java程序員看的。
本篇文章的目標是解釋清楚下面這行Gradle腳本:
apply plugin: 'java'
行尾的分號是可選的
用過JavaScript語言的人對這個語法糖應該比較熟悉,下面是補上分號後的腳本:
apply plugin: 'java';
字符串字面量(Literal)
Java只能用雙引號定義字符串字面量,Groovy語法和JavaScript類似,既可以用雙引號,也可以用單引號。區別是,用雙引號定義的字符串可以插值,如下所示:def pi = 3.14
def str = "pi is ${pi}"
Map字面量
Java語言只有基本類型、String和數組是有字面量的,如下所示:
boolean b = false;
int i = 100;
double d = 4.14;
String s = "java";
int[] arr = {1, 2, 3};
Groovy語言給Map添加了字面量,如下所示:
def langs = ['C++':'Stroustrup', 'Java':'Gosling', 'Lisp':'McCarthy']
語法像是Java裏的數組字面量,key和value用冒號分隔,pair之間用逗號分隔。另外,用這種語法創建出來的是java.util.LinkedHashMap實例。如果key是普通的字符串,還可以進一步省略掉引號,如下所示:
def langs = ['C++':'Stroustrup', Java:'Gosling', Lisp:'McCarthy']
方法調用的括號可以省略
我最早是在Ruby語言裏見到這種語法糖的,apply實際上是個方法,下面是補上括號後的腳本:
apply(plugin: 'java');
如果傳入方法的參數是Map,那麼Map字面量可以省略方括號
補上方括號以後,腳本看起來是這樣:
apply([plugin: 'java']);
結論
apply其實是個方法,接收一個Map類型的參數。
舉一反三
有了上面的分析,看懂下面這段Gradle腳本應該是小菜一碟了:
testCompile group: 'junit', name: 'junit', version: '4.10'