Maven是一個項目管理工具,他包含了一個項目對象模型,一組標準集合,一個項目生命週期,一個依賴管理系統和用來運行定義生命週期階段中插件目標的邏輯。java
Maven是基於約定優於配置的思想來管理代碼目錄的。Maven的核心插件使用了一組通用的約定,以用來編譯源代碼,打包可分發的構件,生成Web站點,以及許多其餘過程。約定的好處是使事情簡單化。網絡
默認約定架構
默認源碼:${basedir}/src/main/javaeclipse
資源文件:${basedir}/src/main/resourcesmaven
測試代碼:${basedir}/src/main/test工具
JAR文件存放在:${basedir}/target/classes測試
Maven有不少優勢包括依賴管理和經過插件重用通常的構建邏輯,可是它成功的最核心的緣由是他定義了構建軟件的通常接口。ui
Maven的核心其實不作什麼實際的的事情,除了解析一些XMl文檔,管理生命週期與插件以外,他什麼都不懂。Maven被設計成將主要的職責委派給一組Maven插件,這些常見能夠影響Maven生命週期,提供對目標的訪問。絕大多數Maven的動做發生於Maven插件的目標,如編譯源代碼,打包二進制代碼,發佈站點和其餘構建任務。spa
Maven維護了一個項目的模型。這個基於每個項目定義的模型實現了一下特徵:插件
·依賴管理
因爲項目是根據一個包含組織標識符,構建標識符和版本的惟一的座標定義的。項目間可使用這些座標來聲明依賴。
·遠程倉庫
能夠經過定義在項目對象模型(POM)中的座標來建立Maven構建的倉庫。
·全局性構建邏輯重用
Maven插件被編寫成和項目模型對象(POM)一塊兒工做,他們沒有被設計成操做某一個已知位置的特定文件(此點可與Ant對比)。一切都被抽象到模型中,插件配置和自定義行爲都在模型中進行。
·工具可移植性/集成
Maven標準化了項目模型對象(POM)模式,可以使用IDE很容易生成有模型生成項目文件。
·便於搜索和過濾構建
Maven的基本原理很簡單,採用遠程倉庫和本地倉庫以及一個相似build.xml的pom.xml,將pom.xml中定義的jar文件從遠程倉庫下載到本地倉庫,各個應用使用同一個本地倉庫的jar,同一個版本的jar只需下載一次,並且避免每一個應用都去拷貝jar。如圖1。同時它採用瞭如今流行的插件體系架構,只保留最小的核心,其他功能都經過插件的形式提供,因此maven下載很小,在執行maven任務時,纔會自動下載須要的插件。
圖1
Maven有一個官方的倉庫,是一個微內核,經過網絡將須要的文件下載到本地,經過官方倉庫將相應的類庫進行統一管理。另外因爲插件的易開發性,如今有了很是多的可供選擇的插件,如與eclipse結合的插件,與Test相關的插件。