對於軟體開發者來說,選擇建構工具 (build tool) 是個重要的決定,對於 Java 開發者來說,擁有更多選擇的情況下更是如此。雖然山姆鍋目前最熟悉的建構工具是 Maven,但是還是來看看在 Java 建構工具這個領域,有哪些變化。

Ant

Ant 是比較早先流行的建構工具,山姆鍋只有一些零星使用的經驗。基本上,採用類似 Makefile 的描述與建構邏輯,提供相當大的彈性。作為基本的建構工具,Ant 已經足夠。但對於大型專案來說,需要的不只單單能夠建構就可以,例如:很難想像沒有自動相依套件管理,在大型專案中如何有效進行程式庫的發佈。

Ivy

Ivy 基於 Ant 為基礎,主要特點是加入相依管理(dependency management),支援 Maven 套件庫。發現這個工具的時候,山姆鍋已經使用 Maven 且是基於 Ant,所以從來沒用過。

Maven

Maven 可以說是目前 Java 領域,建構工具事實上的標準(de facto)。跟 Ant 相比,主要特點有:

  1. 相依套件管理(dependency management)。
  2. 約定優於配置(Convention-over-configuration)。
  3. 可以插件擴充功能,但需要的功能往往已經有第三方提供。
  4. 提供專案的物件模型,作為了解專案基本資訊的主要來源。

越來越多人不滿於 Maven 的嚴格限制,以及使用 XML 作為建構描述檔的肥大,有不少有名的專案改採用其它建構工具,例如:Hibernate 換到 Gradle。

Gradle

Gradle 使用 Groovy 語言,提供領域特定語言 (Domain-Specific Language) 的建構工具。採取任務 (task) 導向的描述方式,但 Gradle 的任務類似 Ant 的目標(target)。任務間可以有相依性,進而可以完成複雜的建構工作。

  1. 支援 Maven 套件庫。
  2. 支援相依套件管理(dependency management)。
  3. 使用 Groovy 客制話建構工作。
  4. 可以重用現存 Ant 開發的程式庫。

基本上是一套相當彈性且針對大部份 Maven 的使用者需要的功能都有直接的支援。對於覺得 Maven 的 “約定優於配置” 綁手綁腳的人來說,這是個不錯的選擇。

Buildr

Buildr 這個工具最有趣的地方在於它是基於 Ruby 的 Rake 來發展,但是卻是面向 Java 的開發。跟 Gradle 一樣,可以讓您使用腳本語言 (Ruby) 來彈性設定建構方案。另一個值得一提的是:如果您已經有安裝 Ruby 環境,那麼安裝 Buildr 就很簡單,只要一個指令就可完成。

1
gem install buildr

除了使用 Ruby 作為領域特定語言以及較少人使用外,功能上其實跟 Gradle 相近。

小結

針對開發工作,山姆鍋還是會先以 Maven 來進行,但是會逐漸實驗 Gradle 跟 Buildr 來取代。