java面試題:Maven 和 ANT 有什麼區別?
阿新 • • 發佈:2019-02-20
雖然兩者功能上都是構建工具,都用於建立 Java 應用,但是 Maven 做的事情更多,在基於“約定優於配置”的概念下,提供標準的Java 專案結構,同時能為應用自動管理依賴(應用中所依賴的 JAR 檔案),具體差異見下文。
Ant僅僅是軟體構建工具,而Maven的定位是軟體專案管理和理解工具。
Maven除了具備Ant的功能外,有以下主要的功能:
- 使用Project Object Model來對軟體專案管理;
- 內建了更多的隱式規則,使得構建檔案更加簡單;
- 內建依賴管理和Repository來實現依賴的管理和統一儲存;
- 內建了軟體構建的生命週期;
具體來說maven的編譯以及所有的指令碼都有一個基礎,就是POM(project object model)。這個模型定義了專案的方方面面,各式各樣的指令碼都在這個模型上工作,而ant需要自己定義,顯然maven更勝一籌。
Maven對所依賴的包都有明確的定義,包名稱,版本號,一目瞭然。而ant則通常是簡單的include 所有的jar。導致的最終結果就是,你根本無法確定專案中的lib下的jar包是哪個版本的,唯一的方法就是開啟 META-INF 目錄下MANIFEST.MF。
Maven是基於中央倉庫(或者私服)的編譯,開發者只需要將編譯所需要的資源放在一箇中央倉庫裡。當編譯的時候,maven會自動在倉庫中找到相應的包,如果本地倉庫沒有,則從設定好的遠端倉庫中下載到本地。這一切都是自動的,而ant需要自己定義了。這個好處導致的結果就是,用maven編譯的專案在釋出的時候只需要釋出原始碼和pom配置檔案,小得很,而反之,ant的釋出則要把所有的包一起釋出,顯然maven又勝了一籌。
maven有大量的重用指令碼可以利用,如生成網站,生成javadoc,sourcecode reference,啟動tomcat,配置編譯的jdk版本等。而ant都需要自己去寫。