近期做的項目中一直是在使用maven。可是要知道最早出來的構建工具是Ant,如今Ant依舊有好多人再用。於是自己就抽出來時間。學習了一下Ant的主要的使用。這樣也能跟好的理解Maven提供的新特性。
首先說一下他們各自的作用:
Ant的作用:是一種基於Java的build工具
- 能夠用ant編譯java類。生成class文件
- ant能夠自己定義標簽、配置文件,用於構建。
- ant能夠把相關層構建成jar包 。
- ant把整個項目生成web包。並公布到Tomcat
Ant的長處:
- 跨平台性:Ant是純Java語言編寫的,因此具有非常好的跨平台性。
- 操作簡單:Ant是由一個內置任務和可選任務組成的。Ant執行時須要一個XML文件(構建文件)。
- Ant通過調用target樹,就能夠運行各種task:每一個task實現了特定接口對象。因為Ant構建文件時XML格式的文件。所以非常easy維護和書寫,並且結構非常清晰。
- Ant能夠集成到開發環境中:因為Ant的跨平台性和操作簡單的特點。它非常easy集成到一些開發環境中去。
Maven的作用: 除了以程序構建能力為特色之外,還提供高級項目管理工具。
Maven除了具備Ant的功能外。還添加了下面基本的功能:
- 使用Project Object Model來對軟件項目管理。
- 內置了很多其它的隱式規則,使得構建文件更加簡單。
- 內置依賴管理和Repository來實現依賴的管理和統一存儲;
- 內置了軟件構建的生命周期;
Maven的長處:
- 擁有約定,知道你的代碼在哪里,放到哪里去
- 擁有一個生命周期,比如運行 mvn install就能夠自己主動運行編譯,測試。打包等構建過程
- 僅僅須要定義一個pom.xml,然后把源代碼放到默認的文件夾,Maven幫你處理其它事情
- 擁有依賴管理。倉庫管理
總體的比較:
Ant將提供了非常多能夠重用的task,比如 copy, move, delete以及junit單元測試Maven則提供了非常多能夠重用的過程。
我們能夠把 Maven看成是一個"build container"這個容器能夠讓我們重用從一系列的項目中抽像出來的build過程。
使用過Ant的朋友都會有這種體會吧。Ant提供的task級別描寫敘述,我們能夠通過想寫shell一樣一個Java項目的build過程來進行描寫敘述。我們能夠寫好一個build.xml文件,來解決我們在Java程序執行編譯過程中須要解決的classpath,以及相關參數的配置問題。僅僅有是項目中的主要結構以及依賴的庫不變,我們非常少去改動build.xml。可是假設我們要開發一個新的項目即使原有項目的build.xml寫的即使再好,其能夠復用得模塊還是比較少的。特別是對項目的結構進行改動后,想不改動build.xml都非常困難。這是由於Ant所提供的可重用的task粒度太小。盡管靈活性非常強。可是我們須要糾纏非常多細節的東西。
正如你所在使用Servlet容器時,並沒有告訴它怎樣去解包WAR文件。在你使用Maven時,你也不須要告訴Maven怎樣build你的項目。Maven提供了一套抽象層用來分離項目的build邏輯。很多人一開始就被Maven所提供的依賴管理(能夠通過XML來描寫敘述項目所依賴的庫的關系)打動。可是使用Maven的主要優點還是它能為提供一個標准的開發構架用來對多個項目進行管理。依賴管理僅僅是這個標准開發構架所提供的一個副產品。
假設想讓Maven實現某個build過程,比如compile, test, install,我們能夠通過寫plugin的方式,非常easy就實現build過程的復用。Maven能夠為我們提供一個非常舒適的build環境,我們不須要通過build.xml定義繁瑣的build過程,僅僅須要告訴這些build過程的plugin,我如今的文件依賴的那些第三方庫,我須要實現什么樣的build功能,就足夠了。那些繁瑣的路徑配置信息,以及復雜的第三方庫下載設置,你通通不用考慮, Maven 以及它的plugin都幫你實現了。