共计 5804 个字符,预计需要花费 15 分钟才能阅读完成。
開發 Java 常見建構工具
Ant with Ivy
Ant 是第一個“現代”構建工具,在很多方面它有些像 Make。2000 年發佈,在很短時間內成為 Java 項目上最流行的構建工具。它的學習曲線很緩,因此不需要什麼特殊的準備就能上手。它基於過程式編程的 idea。在最初的版本之後,逐漸具備了支持插件的功能。
主要的不足是用 XML 作為腳本編寫格式。XML,本質上是層次化的,並不能很好地貼合 Ant 過程化編程的初衷。Ant 的另外一個問題是,除非是很小的項目,否則它的 XML 文件很快就大得無法管理。
後來,隨著通過網絡進行依賴管理成為必備功能,Ant 採用了 Apache Ivy。
Ant 的主要優點在於對構建過程的控制上。
Maven
Maven 發佈於 2004 年。目的是解決程式設計師使用 Ant 所帶來的一些問題。
Maven 仍舊使用 XML 作為編寫構建配置的文件格式,但是,文件結構卻有巨大的變化。Ant 需要程式設計師將執行 task 所需的全部命令都一一列出,然而 Maven 依靠約定(convention)並提供現成的可調用的目標(goal)。不僅如此,有可能最重要的一個補充是,Maven 具備從網絡上自動下載依賴的能力(Ant 後來通過 Ivy 也具備了這個功能),這一點革命性地改變了我們開發軟件的方式。
但是,Maven 也有它的問題。依賴管理不能很好地處理相同庫文件不同版本之間的衝突(Ivy 在這方面更好一些)。XML 作為配置文件的格式有嚴格的結構層次和標準,定製化目標(goal)很困難。因為 Maven 主要聚焦於依賴管理,實際上用 Maven 很難寫出複雜、定製化的構建腳本,甚至不如 Ant。
用 XML 寫的配置文件會變得越來越大,越來越笨重。在大型項目中,它經常什麼“特別的”事還沒幹就有幾百行代碼。
Maven 的主要優點是生命週期。只要項目基於一定之規,它的整個生命週期都能夠輕鬆搞定,代價是犧牲了靈活性。
在對 DSL(Domain Specific Languages) 的熱情持續高漲之時,通常的想法是設計一套能夠解決特定領域問題的語言。在構建這方面,DSL 的一個成功案例就是 Gradle。
Gradle
Gradle 結合了前兩者的優點,在此基礎之上做了很多改進。它具有 Ant 的強大和靈活,又有 Maven 的生命週期管理且易於使用。最終結果就是一個工具在 2012 年華麗誕生並且很快地獲得了廣泛關注。例如,Google 採用 Gradle 作為 Android OS 的默認構建工具。
Gradle 不用 XML,它使用基於 Groovy 的專門的 DSL,從而使 Gradle 構建腳本變得比用 Ant 和 Maven 寫的要簡潔清晰。Gradle 樣板文件的代碼很少,這是因為它的 DSL 被設計用於解決特定的問題:貫穿軟件的生命週期,從編譯,到靜態檢查,到測試,直到打包和部署。
它使用 Apache Ivy 來處理 Jar 包的依賴。
Gradle 的成就可以概括為:約定好,靈活性也高。
內容轉自: