Apache Ant 是一個基於 Java 的建置工具。理論上來說,它有點像 make,但沒有 make 的缺點。
為什麼已經有 make、gnumake、nmake、jam 等建置工具,還要再有一個?因為 Ant 的原始作者在跨平台開發軟體時,發現所有這些工具都有他無法忍受的限制。類似 Make 的工具本質上都是基於 shell:它們會評估一組依賴關係,然後執行類似於你在 shell 中會發出的指令。這表示你可以輕鬆地透過使用或撰寫任何適用於你正在使用的作業系統的程式來擴充這些工具;然而,這也表示你會受到作業系統,或至少是你正在使用的作業系統類型(例如 Unix)的限制。
Makefiles 本質上也很邪惡。任何曾經使用過它們一段時間的人都會遇到可怕的 tab 問題。「我的指令沒有執行,是因為我的 tab 前面有一個空白嗎?!」Ant 的原始作者曾說過太多次這句話。像 Jam 這樣的工具在很大程度上解決了這個問題,但仍然有另一種格式需要使用和記住。
Ant 與眾不同。Ant 不是透過 shell-based 指令來擴充,而是使用 Java 類別來擴充。設定檔不是撰寫 shell 指令,而是基於 XML,呼叫出一個目標樹,在其中執行各種任務。每個任務都由一個實作特定任務介面的物件執行。
當然,這移除了一些原本存在於建構 shell 指令(例如 `find . -name foo -exec rm {}`
)中的表達能力,但它讓你具備跨平台的能力—可以在任何地方和任何時間工作。而且,如果你真的需要執行 shell 指令,Ant 有 <exec>
任務,允許根據執行指令的作業系統執行不同的指令。