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