下面是一些 Gradle 特性的列表。
Gradle 的核心在于基于 Groovy 的豐富而可擴(kuò)展的域描述語(yǔ)言(DSL)。 Groovy 通過(guò)聲明性的語(yǔ)言元素將基于聲明的構(gòu)建推向下層,你可以按你想要的方式進(jìn)行組合。 這些元素同樣也為支持 Java, Groovy,OSGi,Web 和 Scala 項(xiàng)目提供了基于約定的構(gòu)建。 并且,這種聲明性的語(yǔ)言是可以擴(kuò)展的。你可以添加新的或增強(qiáng)現(xiàn)有的語(yǔ)言元素。 因此,它提供了簡(jiǎn)明、可維護(hù)和易理解的構(gòu)建。
聲明性語(yǔ)言?xún)?yōu)點(diǎn)在于通用任務(wù)圖,你可以將其充分利用在構(gòu)建中。它提供了最大限度的靈活性,讓 Gradle 適應(yīng)你的特殊需求。
Gradle 的靈活和豐富性最終能夠支持在你的構(gòu)建中應(yīng)用通用的設(shè)計(jì)模式。 例如,它可以很容易地將你的構(gòu)建拆分為多個(gè)可重用的模塊,最后再進(jìn)行組裝,但不要強(qiáng)制地進(jìn)行模塊的拆分。 不要把原本在一起的東西強(qiáng)行分開(kāi)(比如在你的項(xiàng)目結(jié)構(gòu)里),從而避免讓你的構(gòu)建變成一場(chǎng)噩夢(mèng)。 最后,你可以創(chuàng)建一個(gè)結(jié)構(gòu)良好,易于維護(hù),易于理解的構(gòu)建。
Gradle 允許你在構(gòu)建執(zhí)行的整個(gè)生命周期,對(duì)它的核心配置及執(zhí)行行為進(jìn)行監(jiān)視并自定義。
Gradle 有非常良好的擴(kuò)展性。 從簡(jiǎn)單的單項(xiàng)目構(gòu)建,到龐大的多項(xiàng)目構(gòu)建,它都能顯著地提升你的效率。 這才是真正的結(jié)構(gòu)化構(gòu)建。通過(guò)最先進(jìn)的增量構(gòu)建功能,它可以解決許多大型企業(yè)所面臨的性能瓶頸問(wèn)題。
Gradle 對(duì)多項(xiàng)目構(gòu)建的支持非常出色。項(xiàng)目依賴(lài)是首先需要考慮的問(wèn)題。 我們?cè)试S你在多項(xiàng)目構(gòu)建當(dāng)中對(duì)項(xiàng)目依賴(lài)關(guān)系進(jìn)行建模,因?yàn)樗鼈儾攀悄阏嬲膯?wèn)題域。 Gradle 遵守你的布局。
Gradle 提供了局部構(gòu)建的功能。 如果你在構(gòu)建一個(gè)單獨(dú)的子項(xiàng)目,Gradle 也會(huì)幫你構(gòu)建它所依賴(lài)的所有子項(xiàng)目。 你也可以選擇重新構(gòu)建依賴(lài)于特定子項(xiàng)目的子項(xiàng)目。 這種增量構(gòu)建將使得在大型構(gòu)建任務(wù)中省下大量時(shí)間。
不同的團(tuán)隊(duì)喜歡用不同的方式來(lái)管理他們的外部依賴(lài)。 從 Maven 和 Ivy 的遠(yuǎn)程倉(cāng)庫(kù)的傳遞依賴(lài)管理,到本地文件系統(tǒng)的 jar 包或目錄,Gradle 對(duì)所有的管理策略都提供了方便的支持。
Ant tasks 是最重要的。而更有趣的是,Ant projects 也是最重要的。 Gradle 對(duì)任意的 Ant 項(xiàng)目提供了深度導(dǎo)入,并在運(yùn)行時(shí)將 Ant 目標(biāo)(target)轉(zhuǎn)換為原生的 Gradle 任務(wù)(task)。 你可以從 Gradle 上依賴(lài)它們(Ant targets),增強(qiáng)它們,甚至在你的 build.xml 上定義對(duì) Gradle tasks 的依賴(lài)。Gradle 為屬性、路徑等等提供了同樣的整合。
Gradle 完全支持用于發(fā)布或檢索依賴(lài)的 Maven 或 Ivy 倉(cāng)庫(kù)。 Gradle 同樣提供了一個(gè)轉(zhuǎn)換器,用于將一個(gè) Maven pom.xml 文件轉(zhuǎn)換為一個(gè) Gradle 腳本。Maven 項(xiàng)目的運(yùn)行時(shí)導(dǎo)入的功能將很快會(huì)有。
Gradle 能適應(yīng)你已有的任何結(jié)構(gòu)。因此,你總可以在你構(gòu)建項(xiàng)目的同一個(gè)分支當(dāng)中開(kāi)發(fā)你的 Gradle 構(gòu)建腳本,并且它們能夠并行進(jìn)行。 我們通常建議編寫(xiě)測(cè)試,以保證生成的文件是一樣的。 這種移植方式會(huì)盡可能的可靠和減少破壞性。這也是重構(gòu)的最佳做法。
Gradle 的構(gòu)建腳本是采用 Groovy 寫(xiě)的,而不是用 XML。 但與其他方法不同,它并不只是展示了由一種動(dòng)態(tài)語(yǔ)言編寫(xiě)的原始腳本的強(qiáng)大。 那樣將導(dǎo)致維護(hù)構(gòu)建變得很困難。 Gradle 的整體設(shè)計(jì)是面向被作為一門(mén)語(yǔ)言,而不是一個(gè)僵化的框架。 并且 Groovy 是我們?cè)试S你通過(guò)抽象的 Gradle 描述你個(gè)人的 story 的黏合劑。 Gradle 提供了一些標(biāo)準(zhǔn)通用的 story。這是我們相比其他聲明性構(gòu)建系統(tǒng)的主要特點(diǎn)。 我們的 Groovy 支持也不是簡(jiǎn)單的糖衣層,整個(gè) Gradle 的 API 都是完全 groovy 化的。只有通過(guò) Groovy才能去運(yùn)用它并對(duì)它提高效率。
Gradle Wrapper 允許你在沒(méi)有安裝 Gradle 的機(jī)器上執(zhí)行 Gradle 構(gòu)建。 這一點(diǎn)是非常有用的。比如,對(duì)一些持續(xù)集成服務(wù)來(lái)說(shuō)。 它對(duì)一個(gè)開(kāi)源項(xiàng)目保持低門(mén)檻構(gòu)建也是非常有用的。 Wrapper 對(duì)企業(yè)來(lái)說(shuō)也很有用,它使得對(duì)客戶(hù)端計(jì)算機(jī)零配置。 它強(qiáng)制使用指定的版本,以減少兼容支持問(wèn)題。
Gradle 是一個(gè)開(kāi)源項(xiàng)目,并遵循 ASL 許可。
我們認(rèn)為內(nèi)部 DSL(基于一種動(dòng)態(tài)語(yǔ)言)相比 XML 在構(gòu)建腳本方面優(yōu)勢(shì)非常大。它是一種動(dòng)態(tài)語(yǔ)言。
為什么使用 Groovy?答案在于 Gradle 內(nèi)部的運(yùn)行環(huán)境。 雖然 Gradle 核心目的是作為通用構(gòu)建工具,但它還是主要面向 Java 項(xiàng)目。 這些項(xiàng)目的團(tuán)隊(duì)成員顯然熟悉 Java。我們認(rèn)為一個(gè)構(gòu)建工具應(yīng)該盡可能地對(duì)所有團(tuán)隊(duì)成員透明。
你可能會(huì)想說(shuō),為什么不能使用 Java 來(lái)作為構(gòu)建腳本的語(yǔ)言。 我認(rèn)為這是一個(gè)很有意義的問(wèn)題。對(duì)你們的團(tuán)隊(duì)來(lái)講,它確實(shí)會(huì)有最高的透明度和最低的學(xué)習(xí)曲線(xiàn)。 但由于 Java 本身的局限性,這種構(gòu)建語(yǔ)言可能就不會(huì)那樣友善、 富有表現(xiàn)力和強(qiáng)大。這也是為什么像 Python,Groovy 或者 Ruby 這樣的語(yǔ)言在這方面表現(xiàn)得更好的原因。 我們選擇了 Groovy,因?yàn)樗?Java 人員提供了目前為止最大的透明度。 其基本的語(yǔ)法,類(lèi)型,包結(jié)構(gòu)和其他方面都與 Java 一樣,Groovy 在這之上又增加了許多東西。但是和 Java 也有著共同點(diǎn)。
對(duì)于那些分享和樂(lè)于去學(xué)習(xí) Python 知識(shí)的 Java 團(tuán)隊(duì)而言,上述論點(diǎn)并不適用。 Gradle 的設(shè)計(jì)非常適合在 JRuby 或 Jython 中創(chuàng)建另一個(gè)構(gòu)建腳本引擎。 那時(shí)候,對(duì)我們而言,它只是不再是最高優(yōu)先級(jí)的了。我們很高興去支持任何社區(qū)努力創(chuàng)建其他的構(gòu)建腳本引擎。
更多建議: