Gradle初步
(1)基於宣告的構建和基於約定的構建
Gradle 的核心在於基於 Groovy 的豐富而可擴充套件的域描述語言(DSL)。 Groovy 通過宣告性的語言元素將基於宣告的構建推向下層,你可以按你想要的方式進行組合。 這些元素同樣也為支援 Java, Groovy,OSGi,Web 和 Scala 專案提供了基於約定的構建。 並且,這種宣告性的語言是可以擴充套件的。你可以新增新的或增強現有的語言元素。 因此,它提供了簡明、可維護和易理解的構建。
(2)為以依賴為基礎的程式設計方式提供語言支援
宣告性語言優點在於通用任務圖,你可以將其充分利用在構建中. 它提供了最大限度的靈活性,以讓 Gradle 適應你的特殊需求。
(3)構建結構化
Gradle 的靈活和豐富性最終能夠支援在你的構建中應用通用的設計模式。 例如,它可以很容易地將你的構建拆分為多個可重用的模組,最後再進行組裝,但不要強制地進行模組的拆分。 不要把原本在一起的東西強行分開(比如在你的專案結構裡),從而避免讓你的構建變成一場噩夢。 最後,你可以建立一個結構良好,易於維護,易於理解的構建。
(4)深度 API
Gradle 允許你在構建執行的整個生命週期,對它的核心配置及執行行為進行監視並自定義。
(5)Gradle 的擴充套件
Gradle 有非常良好的擴充套件性。 從簡單的單專案構建,到龐大的多專案構建,它都能顯著地提升你的效率。 這才是真正的結構化構建。通過最先進的增量構建功能,它可以解決許多大型企業所面臨的效能瓶頸問題。
(6)多專案構建
Gradle 對多專案構建的支援非常出色。專案依賴是首先需要考慮的問題。 我們允許你在多專案構建當中對專案依賴關係進行建模,因為它們才是你真正的問題域。 Gradle 遵守你的佈局。
Gradle 提供了局部構建的功能。 如果你在構建一個單獨的子專案,Gradle 也會幫你構建它所依賴的所有子專案。 你也可以選擇重新構建依賴於特定子專案的子專案。 這種增量構建將使得在大型構建任務中省下大量時間。
(7)多種方式管理依賴
不同的團隊喜歡用不同的方式來管理他們的外部依賴。 從 Maven 和 Ivy 的遠端倉庫的傳遞依賴管理,到本地檔案系統的 jar 包或目錄,Gradle 對所有的管理策略都提供了方便的支援。
(8)Gradle 是第一個構建整合工具
Ant tasks 是最重要的。而更有趣的是,Ant projects 也是最重要的。 Gradle 對任意的 Ant 專案提供了深度匯入,並在執行時將 Ant 目標(target)轉換為原生的 Gradle 任務(task)。 你可以從 Gradle 上依賴它們(Ant targets),增強它們,甚至在你的 build.xml 上定義對 Gradle tasks 的依賴。Gradle 為屬性、路徑等等提供了同樣的整合。
Gradle 完全支援用於釋出或檢索依賴的 Maven 或 Ivy 倉庫。 Gradle 同樣提供了一個轉換器,用於將一個 Maven pom.xml 檔案轉換為一個 Gradle 指令碼。Maven 專案的執行時匯入的功能將很快會有。
(9)易移植
Gradle 能適應你已有的任何結構。因此,你總可以在你構建專案的同一個分支當中開發你的 Gradle 構建指令碼,並且它們能夠並行進行。 我們通常建議編寫測試,以保證生成的檔案是一樣的。 這種移植方式會盡可能的可靠和減少破壞性。這也是重構的最佳做法。
Groovy
Gradle 的構建指令碼是採用 Groovy 寫的,而不是用 XML。 但與其他方法不同,它並不只是展示了由一種動態語言編寫的原始指令碼的強大。 那樣將導致維護構建變得很困難。 Gradle 的整體設計是面向被作為一門語言,而不是一個僵化的框架。 並且 Groovy 是我們允許你通過抽象的 Gradle 描述你個人的 story 的黏合劑。 Gradle 提供了一些標準通用的 story。這是我們相比其他宣告性構建系統的主要特點。 我們的 Groovy 支援也不是簡單的糖衣層,整個 Gradle 的 API 都是完全 groovy 化的。只有通過 Groovy才能去運用它並對它提高效率。
The Gradle wrapper
Gradle Wrapper 允許你在沒有安裝 Gradle 的機器上執行 Gradle 構建。 這一點是非常有用的。比如,對一些持續整合服務來說。 它對一個開源專案保持低門檻構建也是非常有用的。 Wrapper 對企業來說也很有用,它使得對客戶端計算機零配置。 它強制使用指定的版本,以減少相容支援問題。
自由和開源
Gradle 是一個開源專案,並遵循 ASL 許可。
三、為什麼使用 Groovy?
我們認為內部 DSL(基於一種動態語言)相比 XML 在構建指令碼方面優勢非常大。它們是一對動態語言。 為什麼使用 Groovy?答案在於 Gradle 內部的執行環境。 雖然 Gradle 核心目的是作為通用構建工具,但它還是主要面向 Java 專案。 這些專案的團隊成員顯然熟悉 Java。我們認為一個構建工具應該儘可能地對所有團隊成員透明。
你可能會想說,為什麼不能使用 Java 來作為構建指令碼的語言。 我認為這是一個很有意義的問題。對你們的團隊來講,它確實會有最高的透明度和最低的學習曲線。 但由於 Java 本身的侷限性,這種構建語言可能就不會那樣友善、 富有表現力和強大。 [1] 這也是為什麼像 Python,Groovy 或者 Ruby 這樣的語言在這方面表現得更好的原因。 我們選擇了 Groovy,因為它向 Java 人員提供了目前為止最大的透明度。 其基本的語法,型別,包結構和其他方面都與 Java 一樣,Groovy 在這之上又增加了許多東西。但是和 Java 也有著共同點。
對於那些分享和樂於去學習 Python 知識的 Java 團隊而言,上述論點並不適用。 Gradle 的設計非常適合在 JRuby 或 Jython 中建立另一個構建指令碼引擎。 那時候,對我們而言,它只是不再是最高優先順序的了。我們很高興去支援任何社群努力建立其他的構建指令碼引擎。