http://hzbook.group.iteye.com/group/wiki/2872-Maven-in-action
做者:
許曉斌(Juven Xu)
Apache組織中的一個頗爲成功的開源項目,Maven主要服務於基於Java平臺的項目構建、依賴管理和項目信息管理。不管是小型的開源類庫項目,仍是大型的企業級應用;不管是傳統的瀑布式開發,仍是流行的敏捷模式,Maven都能大顯身手。
1、Maven的優勢
1.
幫咱們自動化構建過程,從清理、編譯、測試到生成報告,再到打包和部署;
2.
抽象構建過程,提供構建任務實現,
標準化構建過程
;
3.Maven是跨平臺的,不管是在Windows、Linux仍是Mac上,都使用一樣的命令;
4.Maven
經過一個座標系統準確地定位每個構件(artifact),也就是經過一組座標Maven可以找到任何一個Java類庫(如jar文件);
5.
Maven還爲全世界的Java開發者提供了一個免費的中央倉庫,在其中幾乎能夠找到任何的流行開源類庫。經過一些Maven的衍生工具(如Nexus),咱們還能對其進行快速地搜索。只要定位了座標,Maven就可以幫咱們自動下載,省去了手工勞動;
6.
幫助咱們管理本來分散在項目中各個角落的項目信息,包括項目描述、開發者列表、版本控制系統地址、許可證、缺陷管理系統地址等;
2、Maven的安裝和配置
2.1 windows平臺
1.檢查是否安裝必要的jdk
echo %JAVA_HOME% --指向jdk目錄
java -version --查看jdk版本
3.設置環境變量
M2_HOME
D:\bin\apache-maven-3.0(安裝目錄)
Path
%M2_HOME%\bin;
Ps.Path環境變量的做用:在cmd輸入命令時,windows首先在當前路徑尋找可執行文件或腳本,沒有找到的話會接着遍歷Path的路徑,直到找到爲止。
一樣可使用echo %M2_HOME%和 mvn -version 查看maven的安裝目錄和版本
2.2 Unix平臺
與windows平臺基本相似
設置環境變量(以下或者添加到profile文件裏):
export M2_HOME=/home/juven/bin/apache-maven
export PATH=$PATH:$M2_HOME/bin
3、安裝目錄
3.1 M2_HOME
bin
boot
conf
lib
LICENSE.txt
NOTICE.txt
README.txt
- Bin: 該目錄包含了mvn運行的腳本,這些腳本用來配置Java命令,準備好classpath和相關的Java系統屬性,而後執行Java命令。其中mvn是基於UNIX平臺的shell腳本,mvn.bat是基於Windows平臺的bat腳本。在命令行輸入任何一條mvn命令時,實際上就是在調用這些腳本。該目錄還包含了mvnDebug和mvnDebug.bat兩個文件,一樣,前者是UNIX平臺的shell腳本,後者是windows的bat腳本。那麼mvn和mvnDebug有什麼區別和關係呢?打開文件咱們就能夠看到,二者基本是同樣的,只是mvnDebug多了一條MAVEN_DEBUG_OPTS配置,做用就是在運行Maven時開啓debug,以便調試Maven自己。此外,該目錄還包含m2.conf文件,這是classworlds的配置文件,稍微會介紹classworlds。
- Boot: 該目錄只包含一個文件,以maven 3.0爲例,該文件爲plexus-classworlds-2.2.3.jar。plexus-classworlds是一個類加載器框架,相對於默認的java類加載器,它提供了更豐富的語法以方便配置,Maven使用該框架加載本身的類庫。更多關於classworlds的信息請參考http://classworlds.codehaus.org/。對於通常的Maven用戶來講,沒必要關心該文件。
- Conf: 該目錄包含了一個很是重要的文件settings.xml。直接修改該文件,就能在機器上全局地定製Maven的行爲。通常狀況下,咱們更偏向於複製該文件至~/.m2/目錄下(這裏~表示用戶目錄),而後修改該文件,在用戶範圍定製Maven的行爲。本書的後面將會屢次提到該settings.xml,並逐步分析其中的各個元素。
- Lib: 該目錄包含了全部Maven運行時須要的Java類庫,Maven自己是分模塊開發的,所以用戶能看到諸如mavn-core-3.0.jar、maven-model-3.0.jar之類的文件,此外這裏還包含一些Maven用到的第三方依賴如common-cli-1.2.jar、google-collection-1.0.jar等等。(對於Maven 2來講,該目錄只包含一個如maven-2.2.1-uber.jar的文件本來各爲獨立JAR文件的Maven模塊和第三方類庫都被拆解後從新合併到了這個JAR文件中)。能夠說,這個lib目錄就是真正的Maven。關於該文件,還有一點值得一提的是,用戶能夠在這個目錄中找到Maven內置的超級POM,這一點在8.5小節詳細解釋。其餘: LICENSE.txt記錄了Maven使用的軟件許可證Apache License Version 2.0;NOTICE.txt記錄了Maven包含的第三方軟件;而README.txt則包含了Maven的簡要介紹,包括安裝需求及如何安裝的簡要指令等等。
3.2 ~/.m2
mvn help:system
。該命令會打印出全部的
Java
系統屬性和環境變量,這些信息對咱們平常的編程工做頗有幫助。
在用戶目錄下,咱們能夠發現
.m2
文件夾。默認狀況下,該文件夾下放置了
Maven
本地倉庫
.m2/repository
。全部的
Maven
構件(
artifact
)都被存儲到該倉庫中,以方便重用。
默認狀況下,
~/.m2
目錄下除了
repository
倉庫以外就沒有其餘目錄和文件了,不過大多數
Maven
用戶須要複製
M2_HOME/conf/settings.xml
文件到
~/.m2/settings.xml
。
4、設置HTTP代理
ping repo1.maven.org
檢查網絡
編輯
~/.m2/settings.xml
文件(若是沒有該文件,則複製
$M2_HOME/conf/settings.xml
)
添加代理配置以下:
<settings>
…
<proxies>
<proxy>
<id>my-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>218.14.227.197</host>
<port>3128</port>
<!--
<username>***</username>
<password>***</password>
<nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>
-->
</proxy>
</proxies>
…
</settings>
5、安裝m2eclipse
m2e - http://m2eclipse.sonatype.org/sites/m2e
這款插件可使eclipse直接導入或建立Maven項目,項目右鍵Run as能夠直接使用或定製maven命令。
6、使用入門
Maven
項目的核心是
pom.xml
。
POM
(
Project Object Model
,項目對象模型)定義了項目的基本信息,用於描述項目如何構建,聲明項目依賴,等等。
Maven
最主要的命令:
mvn clean compile
、mvn clean test
、mvn clean package
、mvn clean install
。執行
test
以前是會先執行
compile
的,執行
package
以前是會先執行
test
的,而相似地,
install
以前會執行
package
。咱們能夠在任何一個
Maven
項目中執行這些命令,並且咱們已經清楚它們是用來作什麼的。
7、使用Archetype生成項目骨架
若是是Maven 3,簡單的運行:
mvn archetype:generate
若是是Maven 2,最好運行以下命令:
mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
Define value
for groupId: : com.letica.myapp
Define value
for artifactId: : hello-world
Define value
for version: 1.0-SNAPSHOT: :
Define value
for
package: com.letica.myapp: : com.letica.myapp.helloworld
Confirm properties configuration:
groupId: com.letica.myapp
artifactId: hello-world
version: 1.0-SNAPSHOT
package: com.letica.myapp.helloworld Y: : Y