鍍金池/ 教程/ Android/ 閑言構建
Groovy 介紹
腳本類、文件 I/O 和 XML 操作
更多
一些前提知識
Gradle 工作流程
基本組件
題外話
總結
Gradle 編程模型及 API 實例詳解
閉包
Gradle 介紹
閑言構建
Groovy 中的數據類型

閑言構建

構建,叫 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í)行。當然,這些底層的渣活不需要你管。

  • 除了可以用很靈活的語言來寫構建規(guī)則外,Gradle 另外一個特點就是它是一種 DSL,即 Domain Specific Language,領域相關語言。什么是 DSL,說白了它是某個行業(yè)中的行話。還是不明白?徐克導演得《智取威虎山》中就有很典型的 DSL 使用描述,比如:

土匪:蘑菇,你哪路?什么價?(什么人?到哪里去?)  

楊子榮:哈!想啥來啥,想吃奶來了媽媽,想娘家的人,孩子他舅舅來了。(找同行)  

楊子榮:拜見三爺!  

土匪:天王蓋地虎?。愫么蟮哪懀「襾須饽愕淖孀??)  

楊子榮:寶塔鎮(zhèn)河妖!(要是那樣,叫我從山上摔死,掉河里淹死。)  

土匪:野雞悶頭鉆,哪能上天王山!(你不是正牌的。)  

楊子榮:地上有的是米,喂呀,有根底?。ɡ献邮钦频?,老牌的。)  

Gradle 中也有類似的行話,比如 sourceSets 代表源文件的集合等.....太多了,記不住。以后我們都會接觸到這些行話。那么,對使用者而言,這些行話的好處是什么呢?這就是:

一句行話可以包含很多意思,而且在這個行當里的人一聽就懂,不用解釋。另外,基于行話,我們甚至可以建立一個模板,使用者只要往這個模板里填必須要填的內容,Gradle 就可以非常漂亮得完成工作,得到想要的東西。

這就和現(xiàn)在的智能炒菜機器似的,只要選擇菜譜,把食材準備好,剩下的事情就不用你操心了。吃貨們對這種做菜方式肯定是以反感為主,太沒有特色了。但是程序員對 Gradle 類似做法卻熱烈擁抱。

到此,大家應該明白要真正學會 Gradle 恐怕是離不開下面兩個基礎知識:

  • Groovy,由于它基于 Java,所以我們僅介紹 Java 之外的東西。了解 Groovy 語言是掌握 Gradle 的基礎。

  • Gradle 作為一個工具,它的行話和它“為人處事”的原則。