第二章 概述
目錄
2.1. 特征
這里是一些Gradle的功能列表。
聲明式構(gòu)建和按照慣例構(gòu)建
Gradle的核心是一個(gè)基于Groovy的豐富的可擴(kuò)展域特定語(yǔ)言(DSL)。Gradle通過(guò)提供聲明式語(yǔ)言元素,將聲明式構(gòu)建推向下一個(gè)層次,您可以隨意組合。這些元素還為Java,Groovy,OSGi,Web和Scala項(xiàng)目提供了逐個(gè)會(huì)議的支持。甚至更多,這種說(shuō)明性的語(yǔ)言是可擴(kuò)展的。添加您自己的新語(yǔ)言元素或增強(qiáng)現(xiàn)有語(yǔ)言元素,從而提供簡(jiǎn)潔,可維護(hù)和易于理解的構(gòu)建。用于依賴(lài)編程的語(yǔ)言
聲明性語(yǔ)言位于通用任務(wù)圖之上,您可以充分利用您的構(gòu)建。它提供了極大的靈活性,使Gradle適應(yīng)您的獨(dú)特需求。構(gòu)建你的構(gòu)建
Gradle的靈活性和豐富性最終使您可以將常用的設(shè)計(jì)原則應(yīng)用于您的構(gòu)建。例如,從構(gòu)建邏輯的可重用部分組成構(gòu)建是非常容易的。內(nèi)聯(lián)的東西,不必要的indirections是不合適的。不要被強(qiáng)迫拆散屬于一起的東西(例如在你的項(xiàng)目層次結(jié)構(gòu)中)。避免像霰彈槍的變化或不同的變化,把你的構(gòu)建成為維修噩夢(mèng)的氣味。最后,您可以創(chuàng)建一個(gè)結(jié)構(gòu)良好,易于維護(hù),易于理解的構(gòu)建。深度API
從被嵌入到構(gòu)建執(zhí)行的整個(gè)生命周期的許多鉤子中,Gradle允許你監(jiān)視和定制其配置和執(zhí)行行為到其核心。Gradle秤
Gradle比例很好。它顯著提高了您的生產(chǎn)力,從簡(jiǎn)單的單一項(xiàng)目建立到龐大的企業(yè)多項(xiàng)目生成。這是構(gòu)建構(gòu)建的真實(shí)情況。借助先進(jìn)的增量構(gòu)建功能,解決許多大型企業(yè)構(gòu)建的性能問(wèn)題也是如此。|多項(xiàng)目構(gòu)建
Gradle對(duì)多項(xiàng)目構(gòu)建的支持非常出色。項(xiàng)目依賴(lài)是一等公民。我們?cè)试S您在多項(xiàng)目構(gòu)建中為項(xiàng)目關(guān)系建模,因?yàn)樗鼈兇_實(shí)適合您的問(wèn)題域。Gradle遵循你的布局,反之亦然。Gradle提供了部分構(gòu)建。如果您構(gòu)建一個(gè)子項(xiàng)目,Gradle負(fù)責(zé)構(gòu)建子項(xiàng)目所依賴(lài)的所有子項(xiàng)目。您也可以選擇重建依賴(lài)于特定子項(xiàng)目的子項(xiàng)目。與增量構(gòu)建一起,這對(duì)于大型構(gòu)建來(lái)說(shuō)是一個(gè)很大的節(jié)省時(shí)間。
許多方法來(lái)管理你的依賴(lài)關(guān)系
不同的團(tuán)隊(duì)更喜歡不同的方式來(lái)管理他們的外部依賴(lài)。Gradle為任何策略提供了便利的支持。從遠(yuǎn)程Maven和Ivy存儲(chǔ)庫(kù)的傳遞依賴(lài)管理到本地文件系統(tǒng)上的jar或目錄。Gradle是第一個(gè)構(gòu)建集成工具
螞蟻任務(wù)是一等公民。更有趣的是,螞蟻?lái)?xiàng)目也是一流的公民。Gradle為任何Ant項(xiàng)目提供了深入的導(dǎo)入,在運(yùn)行時(shí)將Ant目標(biāo)轉(zhuǎn)換為本地Gradle任務(wù)。您可以從Gradle中依賴(lài)它們,您可以從Gradle中增強(qiáng)它們,甚至可以在build.xml中聲明對(duì)Gradle任務(wù)的依賴(lài)關(guān)系。為屬性,路徑等提供了相同的集成。
Gradle完全支持現(xiàn)有的Maven或Ivy存儲(chǔ)庫(kù)基礎(chǔ)結(jié)構(gòu),用于發(fā)布和檢索依賴(lài)關(guān)系。Gradle還提供了一個(gè)將Maven pom.xml轉(zhuǎn)換為Gradle腳本的轉(zhuǎn)換器。Maven項(xiàng)目的運(yùn)行時(shí)導(dǎo)入即將到來(lái)。
易于遷移
Gradle可以適應(yīng)任何你有的結(jié)構(gòu)。因此,您可以始終在您的生產(chǎn)構(gòu)建所在的同一分支中開(kāi)發(fā)您的Gradle構(gòu)建,并且可以并行演化。我們通常建議編寫(xiě)測(cè)試,確保產(chǎn)生的文物是相似的。這樣遷移就不那么具有破壞性和可靠性。這是遵循通過(guò)應(yīng)用嬰兒步驟進(jìn)行重構(gòu)的最佳實(shí)踐。Groovy的
Gradle的構(gòu)建腳本是用Groovy編寫(xiě)的,而不是XML。但是與其他方法不同,這不是簡(jiǎn)單地暴露動(dòng)態(tài)語(yǔ)言的原始腳本功能。這只會(huì)導(dǎo)致維護(hù)建設(shè)非常困難。Gradle的整個(gè)設(shè)計(jì)都是作為一種語(yǔ)言來(lái)使用的,而不是一個(gè)僵化的框架。而Groovy是我們的膠水,可以讓你用Gradle(或者你)提供的抽象來(lái)講述你的個(gè)人故事。Gradle提供了一些標(biāo)準(zhǔn)的故事,但他們沒(méi)有任何形式的特權(quán)。與其他聲明式構(gòu)建系統(tǒng)相比,這對(duì)我們來(lái)說(shuō)是一個(gè)重要的特色。我們的Groovy支持不僅僅是糖衣。整個(gè)Gradle API是完全Groovy化的。添加Groovy會(huì)帶來(lái)愉快和高效的體驗(yàn)。Gradle包裝
Gradle Wrapper允許您在沒(méi)有安裝Gradle的機(jī)器上執(zhí)行Gradle構(gòu)建。這對(duì)于一些持續(xù)集成服務(wù)器來(lái)說(shuō)是有用的。對(duì)于一個(gè)開(kāi)源項(xiàng)目來(lái)說(shuō),保持構(gòu)建它的屏障是很有用的。包裝對(duì)于企業(yè)來(lái)說(shuō)也很有意思。這是客戶(hù)端機(jī)器的零管理方法。它還強(qiáng)制使用特定的Gradle版本,從而最大限度地減少支持問(wèn)題。自由和開(kāi)源
Gradle是一個(gè)開(kāi)源項(xiàng)目,并在ASL下獲得許可。
2.2.為什么選擇Groovy?
我們認(rèn)為,在構(gòu)建腳本中使用內(nèi)部DSL(基于動(dòng)態(tài)語(yǔ)言)優(yōu)于XML的優(yōu)點(diǎn)是巨大的。那里有幾種動(dòng)態(tài)語(yǔ)言。為什么選擇Groovy?答案在于Gradle運(yùn)行的環(huán)境。雖然Gradle是一個(gè)通用的構(gòu)建工具,但它的主要焦點(diǎn)是Java項(xiàng)目。在這樣的項(xiàng)目中,團(tuán)隊(duì)成員將非常熟悉Java。我們認(rèn)為一個(gè)構(gòu)建應(yīng)該盡可能的透明給所有的團(tuán)隊(duì)成員。
在這種情況下,您可能會(huì)爭(zhēng)論為什么我們不只是使用Java作為構(gòu)建腳本的語(yǔ)言。我們認(rèn)為這是一個(gè)有效的問(wèn)題。它會(huì)為你的團(tuán)隊(duì)提供最高的透明度和最低的學(xué)習(xí)曲線,但是由于Java的限制,這樣的構(gòu)建語(yǔ)言將不會(huì)像表面上那么好,而且功能強(qiáng)大。[1]像Python,Groovy或Ruby這樣的語(yǔ)言在這里做得更好。我們選擇了Groovy,因?yàn)樗鼮镴ava人提供了最大的透明度。它的基本語(yǔ)法和Java以及它的類(lèi)型系統(tǒng),它的包結(jié)構(gòu)和其他東西一樣。除此之外,Groovy還提供了更多的功能,但是卻擁有Java的通用基礎(chǔ)。
對(duì)于具有Python或Ruby知識(shí)的Java開(kāi)發(fā)人員或希望了解這些知識(shí)的人,上述論點(diǎn)不適用。Gradle設(shè)計(jì)非常適合在JRuby或Jython中創(chuàng)建另一個(gè)構(gòu)建腳本引擎。目前對(duì)我們來(lái)說(shuō),這并不是最重要的。我們高興地支持任何社區(qū)努力創(chuàng)建額外的構(gòu)建腳本引擎。
[1]在http://www.defmacro.org/ramblings/lisp.html,你會(huì)發(fā)現(xiàn)一篇比較有趣的文章,比較Ant,XML,Java和Lisp。有趣的是,如果本文中的“如果Java有這種語(yǔ)法”語(yǔ)法實(shí)際上就是Groovy語(yǔ)法。