Maven主要服務於基於Java平臺的項目構建、依賴管理和項目信息管理。java
Maven的項目構建:自動化構建過程,從清理、編譯、測試到生成報告,再到打包和部署。
Maven抽象了一個完整的構建生命週期模型;標準化構建過程。
shell
Maven的依賴管理:經過座標系統準確地定位每個構件(artifact),也就是經過一組座標Maven可以找到任何一個Java類庫(如jar文件)。apache
Maven的項目信息管理:管理項目描述、開發者列表、版本控制系統地址、許可證、缺陷管理系統地址等。除了直接的項目信息,經過Maven自動生成的站點,以及一些已有的插件,還能夠輕鬆地得到項目文檔、測試報告、靜態分析報告、源碼版本日誌報告等很是具備價值的項目信息。編程
Maven還爲全世界的Java開發者提供了一個免費的中央倉庫,在其中幾乎能夠找到任何的流行開源類庫。經過一些Maven的衍生工具(如Nexus),還可以對其進行快速地搜索。只要定位了座標,Maven就可以幫咱們自動下載。安全
使用Maven還能享受一個額外的好處,即Maven對於項目目錄結構、測試用例命名方式等內容都有既定的規則,只要遵循了這些成熟的規則,用戶在項目間切換的時候就免去了額外的學習成本,能夠說是約定優於配置(Convention Over Configuration)。框架
Maven實戰(一)Maven的安裝與配置
1.檢查JDK的安裝
安裝好JDK(JDK1.4及以上版本)並設置好環境變量
打開命令行運行:
echo %JAVA_HOME%
java -versionmaven
2.下載Maven
http://maven.apache.org/ ,版本apache-maven-3.2.1-bin.zip工具
3.安裝
解壓到E:\dev\maven下學習
4.設置環境變量
M2_HOME:E:\dev\maven\apache-maven-3.2.1
PATH新增:;%M2_HOME%\bin測試
5. 檢測安裝是否成功
打開命令行運行:
echo %M2_HOME%
mvn -v
有相關信息顯示說明安裝成功。
6.安裝目錄分析
(1)M2_HOME
M2_HOME環境變量指向Maven的安裝目錄。該目錄的結構和內容:
1)bin:該目錄包含了mvn運行的腳本,這些腳本用來配置Java命令,準備好classpath和相關的Java系統參數,而後執行Java命令。其中mvn是基於Unix平臺的shell腳本,mvn.bat是基於Windows平臺的bat腳本。在命令行中輸入任何一條mvn命令時,實際上就是在調用這些腳本。該目錄還包含了mvnDebug和mvnDebug.bat兩個文件。那麼mvn和mvnDebug有什麼區別和關係呢?打開文件查看,可知二者基本同樣,只是mvnDebug多了一條MAVEN_DEBUG_OPTS配置,其做用就是在運行Maven時開啓debug,以便調試Maven自己。此外,該目錄還包含m2.conf文件,這是classworlds的配置文件。
2)boot:該目錄只包含一個文件,Maven3中該文件是plexus-classworlds-2.5.1.jar。plexus-classworlds是一個類加載器框架,相對於默認的java類加載器,它提供了更豐富的語法以方便配置,Maven使用該框架加載本身的類庫。對於通常的Maven用戶來講,沒必要關心該文件。
3)conf:該目錄包含一個很是重要的文件settings.xml。直接修改該文件,就能在機器上全局地定製Maven的行爲。通常狀況下,咱們更偏向於複製該文件至~/.m2/目錄下(~表示用戶目錄),而後修改該文件,在用戶範圍定製Maven的行爲。
4)lib:該目錄包含了全部Maven運行時須要的Java類庫,Maven自己是分模塊開發的,所以用戶能看到諸如maven-core-3.2.1.jar、maven-model-3.2.1.jar之類的文件。此外,還包含一些Maven用到的第3方依賴,如common-cli-1.2.jar、guava-14.0.1.jar等。
5)LICENSE.txt:記錄了Maven使用的軟件許可證Apache License Version 2.0。
6)NOTICE.txt:記錄了Maven包含的第三方軟件。
7)README.txt:包含了Maven的簡要介紹,包括安裝需求及如何安裝的簡要指令等。
(2)~/.m2
命令:
mvn help:system
該命令會打印出全部的Java系統屬性和環境變量,這些信息對平常編程工做頗有幫助。
該命令會讓Maven執行一個真正的任務,從命令行輸出可知Maven會下載一些pom文件和jar文件,這些文件都是從Maven的中央倉庫下載到Maven的本地倉庫的。
當前的用戶目錄:
Windows XP:C:\Documents and Settings\huhu
Windows 7:C:\Users\huhu
Unix/Linux:cd回車,就能夠轉到當前用戶目錄
~:表示當前用戶目錄。
在用戶目錄下能夠發現.m2文件夾。默認狀況下,該文件下放置了Maven本地倉庫.m2/repository。全部的Maven構件都被存儲到該倉庫中,以便重用。Maven根據一套規則來肯定任何一個構件在倉庫中的位置。
默認狀況下,~/.m2目錄下除了repository倉庫以外沒有其餘目錄和文件了,不過大多數Maven用戶須要複製M2_HOME/conf/settings.xml文件到~/.m2/settings.xml。這是一條最佳實踐。
7.設置HTTP代理
有時候你所在的公司基於安全因素考慮,要求你使用經過安全認證的代理訪問因特網。這時就須要爲Maven配置HTTP代理,才能讓它正常地訪問外部倉庫,如下載所須要的資源。
編輯~/.m2/setting.xml文件中以下(若是沒有該文件,則複製$M2_HOME/conf/setting.xml)
<settings> <proxies> <proxy> <id>my-proxy</id> <active>true</active> <protocol>http</protocol> <host>218.14.227.197</host> <port>3128</port> <!-- <username>proxyuser</username> <password>proxypass</password> <nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts> --> </proxy> </proxies> </settings>
這段配置十分簡單,proxies下能夠有多個proxy元素,若是聲明瞭多個proxy元素,則默認狀況下第一個被激活的proxy會生效。
這裏聲明瞭一個id爲my-proxy的代理,
active的值爲true表示激活該代理,
protocol表示使用的代理協議,這裏是http。
固然,最重要是指定正確的主機名(host元素)和端口(port元素)。
上述XML配置中註釋掉了username、password、nonProxyHost幾個元素。
當代理服務須要認證時,就須要配置username和password。nonProxyHost元素用來指定哪些主機名不須要代理,可使用"|"符號來分隔多個主機名。此外,該配置也支持通配符,如*.google.com表示全部以google.com結尾的域名訪問都不須要經過代理。
8.安裝Eclise的Maven插件
Eclipse 4.3(Kepler)默認安裝Maven插件。
在Eclipse中,單擊菜單欄-File-New-Maven Project,就能夠建立Maven項目。
9.Maven安裝最佳實踐
(1)設置MAVEN_OPTS環境變量
運行mvn命令其實是執行了java命令,既然是運行java,那麼運行java命令可用的參數也應該在運行mvn命令時可用。這個時候MAVEN_OPTS環境變量就能派上用場。
一般須要設置MAVEN_OPTS的值爲-Xms128m -Xmx512m,由於java默認的最大可用內存每每不能知足Maven運行的須要,好比在項目較大時,使用Maven生成項目站點須要佔用大量的內存,若是沒有該配置,則很容易獲得java.lang.OutOfMemeoryError。所以。推薦開始就設置該環境變量。
關於設置環境變量,參考設置M2_HOME環境變量的作法,儘可能不要直接修改mvn或mvn.bat這兩個Maven執行腳本文件。由於修改了腳本文件,升級Maven時,就必須再次修改,比較麻煩,也容易忘記。
同理,應該儘量地不要去修改Maven安裝目錄下的任何文件。
(2)配置用戶範圍settings.xml
Maven用戶能夠選擇配置$M2_HOME/conf/settings.xml或~/.m2/settings.xml。
前者是全局範圍的,整臺機器上的全部用戶都會直接受到該配置的影響,然後者是用戶範圍的,只有當前用戶纔會受到該配置的影響。
推薦使用用戶範圍的settings.xml,主要是爲了不影響到系統中的其餘用戶。若是須要統一系統中全部用戶的settings.xml配置,應該使用全局範圍的settings.xml。
使用用戶範圍的settings.xml還便於Maven升級。
(3)不要使用IDE內嵌的Maven
應該在IDE中配置Maven插件時使用與命令行(由於除了IDE,常常會使用命令行的Maven)一致的Maven。
菜單欄-Windows-Preferences-Maven-Installations:在右側的面板中,有一個默認的Embedded Maven被選中。單擊"Add..."按鈕,而後選擇Maven的安裝目錄M2_HOME,添加完畢以後選擇這個外部的Maven。