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

Ant

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

Ivy

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

Maven

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

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

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

Gradle

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

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

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

Buildr

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

gem install buildr

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

小結

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