Wednesday, May 14, 2008

Maven 筆記 (1) - Maven 與 Ant 的分別

這裡說的 Maven 是 Maven2

1) Ant 可以說是一個 script,當中要把每個 step 寫出。Maven 是 Declarative 的,不是告訴 build tools "怎樣做",而是告訴 build tools "做什麼"。
例如在 Ant 中你要寫:建立 output directory,然後 compile 某 source directory 裡的 source 往 output directory, 再 copy 某些 resource files 到 output directory, 然後再 jar 成什麼什麼名字。
在 Maven 中則只是宣告:source directory 在哪裡,output directory 在哪,我的 project 要 build 成 jar (還是 war/ear etc),我的成品要叫什麼名字。

2) Ant 對於每樣做的事都需要逐一 Config 好。Maven 則是主張 Convention over Configuration。有些東西定好了 Convention (慣例) 後,只要你跟從該慣例,便不需額外做 configuration。
比如,如果我的 source directory 跟從了 maven 所定的慣例,我的 POM.xml (Maven 的 "build script") 只需要定義這個 project 的名稱等,連 compile 的 source directory 都不需設定,就已經能交給 maven 去了:http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Minimal_POM

Maven 與 Ant 整個設計哲學簡直是南轅北轍,孰佳孰劣很難比較。但綜觀而言,對於一般的 project, 使用 Maven 能逼使你把 project 結構想好 (一個混亂的結構與依賴關係的 project 套用 Maven 會很困難)。Maven 的 pom.xml 比起 Ant 的 build.xml 看起來更一目瞭然。但一些特別的 step, 在 Ant 中可能寫幾句就可以達到,在 Maven 中,要是沒有適當的 plugin, 做起來可能很麻煩。

No comments: