構建,叫 build 也好,叫 make 也行。反正就是根據輸入信息然后干一堆事情,最后得到幾個產出物(Artifact)。
最最簡單的構建工具就是 make 了。make 就是根據 Makefile 文件中寫的規(guī)則,執(zhí)行對應的命令,然后得到目標產物。
日常生活中,和構建最類似的一個場景就是做菜。輸入各種食材,然后按固定的工序,最后得到一盤菜。當然,做同樣一道菜,由于需求不同,做出來的東西也不盡相同。比如,宮保雞丁這道菜,回民要求不能放大油、口淡的要求少放鹽和各種油、辣不怕的男女漢子們可以要求多放辣子....總之,做菜包含固定的工序,但是對于不同條件或需求,需要做不同的處理。
在 Gradle 爆紅之前,常用的構建工具是 ANT,然后又進化到 Maven。ANT 和 Maven 這兩個工具其實也還算方便,現(xiàn)在還有很多地方在使用。但是二者都有一些缺點,所以讓更懶得人覺得不是那么方便。比如,Maven 編譯規(guī)則是用 XML 來編寫的。XML 雖然通俗易懂,但是很難在 xml 中描述 if{某條件成立,編譯某文件}/else{編譯其他文件}這樣有不同條件的任務。
怎么解決?怎么解決好?對程序員而言,自然是編程解決,但是有幾個小要求:
這種“編程”不要搞得和程序員理解的編程那樣復雜。寥寥幾筆,輕輕松松把要做的事情描述出來就最好不過。所以,Gradle 選擇了 Groovy。Groovy 基于 Java 并拓展了 Java。 Java 程序員可以無縫切換到使用 Groovy 開發(fā)程序。Groovy 說白了就是把寫 Java 程序變得像寫腳本一樣簡單。寫完就可以執(zhí)行,Groovy 內部會將其編譯成 Java class 然后啟動虛擬機來執(zhí)行。當然,這些底層的渣活不需要你管。
土匪:蘑菇,你哪路?什么價?(什么人?到哪里去?)
楊子榮:哈!想啥來啥,想吃奶來了媽媽,想娘家的人,孩子他舅舅來了。(找同行)
楊子榮:拜見三爺!
土匪:天王蓋地虎?。愫么蟮哪懀「襾須饽愕淖孀??)
楊子榮:寶塔鎮(zhèn)河妖!(要是那樣,叫我從山上摔死,掉河里淹死。)
土匪:野雞悶頭鉆,哪能上天王山!(你不是正牌的。)
楊子榮:地上有的是米,喂呀,有根底?。ɡ献邮钦频?,老牌的。)
Gradle 中也有類似的行話,比如 sourceSets 代表源文件的集合等.....太多了,記不住。以后我們都會接觸到這些行話。那么,對使用者而言,這些行話的好處是什么呢?這就是:
一句行話可以包含很多意思,而且在這個行當里的人一聽就懂,不用解釋。另外,基于行話,我們甚至可以建立一個模板,使用者只要往這個模板里填必須要填的內容,Gradle 就可以非常漂亮得完成工作,得到想要的東西。
這就和現(xiàn)在的智能炒菜機器似的,只要選擇菜譜,把食材準備好,剩下的事情就不用你操心了。吃貨們對這種做菜方式肯定是以反感為主,太沒有特色了。但是程序員對 Gradle 類似做法卻熱烈擁抱。
到此,大家應該明白要真正學會 Gradle 恐怕是離不開下面兩個基礎知識:
Groovy,由于它基于 Java,所以我們僅介紹 Java 之外的東西。了解 Groovy 語言是掌握 Gradle 的基礎。