Maven or Ant?

    Maven vs Ant就像IntelliJ vs Eclipse, SWT vs Swing 和 Spring vs EJB,算是一種"半信仰"話題。這兩種工具都挺有趣,所以取捨就看你的需求了。Ant只是一個framework,或者說不是一種即存即用(out of the box)的build-DSL。使用者必須利用已有的Ant-task來編寫build腳本。Ant task不會事先假設任何的默認的規範和配置,因此工程的所有文件佈局都是你自己的工作。你對所有的東西都有完全的控制權--當工程規模變得一大問題就來了。

    Maven可以被看作使用默認規範優先配置的Ant("Ant With Convention Over Configuration")。事實上,如果你利用像"標準路徑佈局"的默認規範,Maven不需要改動任何東西和配置就能動起來。你需要的只是在第一次build的時候能成功連接上internet:-)

    在使用每個默認規範優先配置(Convention Over Configuration)的框架的時候,你必須對默認規範有很好的理解。萬一你的工程不符合默認規範,那你就不得不重新整理你的工程,這絕對是很複雜的工作。

    Maven的一大優勢就是它的依賴管理(dependency management)。你只需要聲明需要的依賴包,然後Maven會自己下載這些包,自動設置classpath,甚至自動部署這些依賴包。Maven不只是能管理直接的依賴的依賴包,而且還能管理傳遞依賴的依賴包。這點絕對是Maven的優勢。Ant沒有這樣能即存即用(除非使用Ivy)的功能,使用Ant的話必須做大量的工作來達到Maven的依賴管理功能。

    Maven和Ant我都用過,取捨取決於你的需求。在以下情況下Maven就具有優勢:

    1. 很多有"創造力"的開發者參與開發。如果沒有工具的幫助,就很難建立一個統一的工程結構。

    2. 開發者固執於自己的IDE,他們可能同時各自使用IntelliJ, NetBeans和Eclipse。

    3. 管理"產品級"(product-like)工程。你必須在不同的version和branch下面管理各自的依賴。

    4. 工程由若干個團隊來開發不同的模塊。各個模塊定期來組合成應用。

    5. 使用checkstyle,pmd以及創建工程網站等等。用Maven很容易來做這些工作。

    但從其他角度來說,我會選擇Ant:

    1. 需要在幾個月甚至幾個禮拜之內快速開發的特別的軟件。

    2. 需要很特別的外部依賴包的工程。這樣工程不需要很細的依賴管理。

    3. 使用NetBeans的項目:-) 這類項目有事先的Ant腳本定義,他們甚至可以和Hudson完美結合來工作。你要做的只是把所有東西check in到SVN,然後讓Hudson來check out...

    4. 不能很好符合Maven默認規範的遺留項目。不符合Maven默認規範的情況的確讓人頭痛。

    5. 沒有明確需要模塊化的項目。需要的只有很少量的部署的文件。

    從我的經驗來說,這幾年使用Maven和Ant的比率差不多50%-50%。對於些不確定的項目,由於效率和可預測性的關係我會使用Ant。儘管這樣的情況很少。

 

    原文:http://java.dzone.com/news/maven-or-ant by Adam Bien

 

    譯者評論:

    在我的開發經驗來說幾乎都是使用Ant,對於Maven的興趣只是想看看有什麼比Ant更厲害的build工具:) 畢竟Ant已經相當強了,從編譯到測試到文件操作幾乎都可以勝任。在看了Maven之後發現它的核心理念在於"Convention Over Configuration"以及"Project Object Model, POM"。這真的很cool。如果要我搞一個和Ant比肩的build工具,我真的想不到有如此的想法。這就是創新!從某個角度來說Convention 就是一個標準的Configuration。很多時候在設計軟件的時候,大家都會問"你這個設計夠不夠靈活?在A情況下可以處理嗎?在B情況下可以處理嗎?"...這個時候也許我們可以從"Convention Over Configuration"來考慮問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章