1 什麼是
Maven
Maven 項目對象模型
(POM),能夠經過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。
Maven 除了以程序構建能力爲特點以外,還提供高級項目管理工具。因爲
Maven 的缺省構建規則有較高的可重用性,因此經常用兩三行
Maven 構建腳本就能夠構建簡單的項目。因爲
Maven 的面向項目的方法,許多
Apache Jakarta 項目發文時使用
Maven,並且公司項目採用
Maven 的比例在持續增加。
Maven 這個單詞來自於意第緒語(猶太語),意爲知識的積累,最初在
Jakata Turbine 項目中用來簡化構建過程。當時有一些項目(有各自
Ant build 文件),僅有細微的差異,而
JAR 文件都由
CVS 來維護。因而但願有一種標準化的方式構建項目,一個清晰的方式定義項目的組成,一個容易的方式發佈項目的信息,以及一種簡單的方式在多個項目中共享
JARs。
2 Maven 和
ANT 的區別
那麼,
Maven 和
Ant 有什麼不一樣呢?在回答這個問題之前,首先要強調一點:
Maven 和
Ant 針對構建問題的兩個不一樣方面。
Ant 爲
Java 技術開發項目提供跨平臺構建任務。
Maven 自己描述項目的高級方面,它從
Ant 借用了絕大多數構建任務。所以,因爲
Maven 和
Ant 表明兩個差別很大的工具,因此接下來只說明這兩個工具的等同組件之間的區別,如表所示。
Maven 是一個項目管理工具,它包含了一個項目對象模型
(Project Object Model),一組標準集合,一個項目生命週期
(Project Lifecycle),一個依賴管理系統
(Dependency Management System),和用來運行定義在生命週期階段
(phase)中插件
(plugin)目標
(goal)的邏輯。當你使用
Maven 的時候,你用一個明肯定義的項目對象模型來描述你的項目,而後
Maven 能夠應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。
Maven 有一個生命週期,當你運行
mvn install 的時候被調用。這條命令告訴
Maven 執行一系列的有序的步驟,直到到達你指定的生命週期。遍歷生命週期旅途中的一個影響就是,
Maven 運行了許多默認的插件目標,這些目標完成了像編譯和建立一個
JAR 文件這樣的工做。
此外,
Maven 可以很方便的幫你管理項目報告,生成站點,管理
JAR 文件,等等。
3 Maven 倉庫是什麼
Maven 倉庫是基於簡單文件系統存儲的,集中化管理
Java API 資源(構件)的一個服務。倉庫中的任何一個構件都有其惟一的座標,根據這個座標能夠定義其在倉庫中的惟一存儲路徑。得益於
Maven
的座標機制,任何
Maven 項目使用任何一個構件的方式都是徹底相同的,
Maven 能夠在某個位置統一存儲全部的
Maven 項目共享的構件,這個統一的位置就是倉庫,項目構建完畢後生成的構件也能夠安裝或者部署到倉庫中,供其它項目使用。
對於
Maven 來講,倉庫分爲兩類:本地倉庫和遠程倉庫。
3.1 遠程倉庫
遠程倉庫指經過各類協議如
file://和
http://訪問的其它類型的倉庫。這些倉庫多是第三方搭建的真實的遠程倉庫,用來提供他們的構件下載(例如
repo.maven.apache.org 和
uk.maven.org 是
Maven 的中央倉庫)。其它「遠程」倉庫多是你的公司擁有的創建在文件或
HTTP 服務器上的內部倉庫,用來在開發團隊間共享私有構件和管理髮布的。
本地倉庫指本機的一份拷貝,用來緩存遠程下載,包含你還沒有發佈的臨時構件。
4 倉庫配置
Maven 官方網站:
http://maven.apache.org/
Maven 工程中的默認倉庫爲
Apache 提供的中央倉庫(
repo.maven.apache.org)。中央倉庫的信息在超級
Pom 中配置,全部的
maven 項目都會繼承超級
POM。 超級
POM 的位置:
$M2_HOME/lib/maven-model-builder-3.0.jar , 然 後 訪 問 路 徑
org/apache/maven/model/pom-4.0.0.xml,能夠看到配置:
4.1 在 settings.xml 文件中配置本地倉庫
本地倉庫是開發者本地電腦中的一個目錄,用於緩存從遠程倉庫下載的構件。默認的本
地倉庫是
${user.home}/.m2/repository。用戶可以使用
settings.xml 文件修改本地倉庫。具體內容以下:
4.2 在 settings.xml 文件中配置鏡像倉庫
若是倉庫
A 能夠提供倉庫
B 存儲的全部內容,那麼就能夠認爲
A 是
B 的一個鏡像。例如:在國內直接鏈接中央倉庫下載依賴,因爲一些特殊緣由下載速度很是慢。這時,咱們可使用阿里雲提供的鏡像
http://maven.aliyun.com/nexus/content/groups/public/來替換中央倉庫
http://repol.maven.org/maven2/。修改
maven 的
setting.xml 文件,具體內容以下:
4.3 在 pom.xml 文件中指定遠程倉庫
若是默認的中央倉庫沒法知足項目需求,可能須要的構件在另一個遠程倉庫,如
JBoss Maven 倉庫,能夠
POM 中配置該倉庫。
4.4 遠程倉庫的認證
有時候處於安全考慮,須要提供認證信息才能訪問一些遠程倉庫。爲了能讓
maven 訪問倉庫內容,就須要配置認證信息,認證信息的配置不會在
pom.xml 配置,而是在
settings.xml 中配置,由於
pom 會被提交到代碼倉庫中供全部成員訪問,而
settings.xml 通常只放在本機。(此配置經常使用於私服應用,後續會有詳細講解)假設我在
pom.xml 中配置
id=my-proj 的遠程倉庫,須要認證信息,則在
settings.xml 中配置以下:
這裏的
id=my-proj 必定要和
pom.xml 中倉庫的
id一致,這是它們之間惟一的聯繫。
settings.xml 的
servers 中就是用來配服務器受權信息的,固然不只能夠配置倉庫服務器
認證信息,還能夠配置其它的好比
tomcat 服務器受權信息也能夠在這裏配置。
5 倉庫優先級問題
本地倉庫,鏡像倉庫,中央倉庫,
pom 文件中指定的遠程倉庫。鏡像倉庫
=中央倉庫。 鏡像倉庫是用於替代中央倉庫的。倉庫訪問優先級:
5.1 本地倉庫
若是本地倉庫不存在對應信息,訪問
pom 文件中指定的遠程倉庫。這個遠程倉庫是第二優先級。
5.3 遠程倉庫
5.3.1 鏡像倉庫
鏡像倉庫是
Maven 開發過程當中的首選遠程倉庫,在本地倉庫和指定倉庫沒法獲取資源
若是鏡像倉庫不是中央倉庫,則會在訪問鏡像倉庫沒法獲取資源後,訪問中央倉庫。
更多java高級java架構和大數據開發資料,可關注公衆號:程序員理想,獲取最新的行業資訊與技術視頻