《Maven實戰》

參考:http://www.infoq.com/cn/minibooks/maven-in-action

http://hzbook.group.iteye.com/group/wiki/2872-Maven-in-action 

作者:許曉斌(Juven Xu)


Apache組織中的一個頗爲成功的開源項目,Maven主要服務於基於Java平臺的項目構建、依賴管理和項目信息管理。無論是小型的開源類庫項目,還是大型的企業級應用;無論是傳統的瀑布式開發,還是流行的敏捷模式,Maven都能大顯身手。

一、Maven的優點
1.幫我們自動化構建過程,從清理、編譯、測試到生成報告,再到打包和部署;
2.抽象構建過程,提供構建任務實現,標準化構建過程
3.Maven是跨平臺的,無論是在Windows、Linux還是Mac上,都使用同樣的命令;
4.Maven通過一個座標系統準確地定位每一個構件(artifact),也就是通過一組座標Maven能夠找到任何一個Java類庫(如jar文件);
5.Maven還爲全世界的Java開發者提供了一個免費的中央倉庫,在其中幾乎可以找到任何的流行開源類庫。通過一些Maven的衍生工具(如Nexus),我們還能對其進行快速地搜索。只要定位了座標,Maven就能夠幫我們自動下載,省去了手工勞動;
6.幫助我們管理原本分散在項目中各個角落的項目信息,包括項目描述、開發者列表、版本控制系統地址、許可證、缺陷管理系統地址等;

二、Maven的安裝和配置
2.1 windows平臺
1.檢查是否安裝必要的jdk
echo %JAVA_HOME% --指向jdk目錄
java -version --查看jdk版本
2.下載maven,推薦使用3.0,解壓即可 http://maven.apache.org/download.html
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.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命令時,實際上就是在調用這些腳本。該目錄還包含了mvnDebugmvnDebug.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

四、設置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>


五、安裝m2eclipse
m2e - http://m2eclipse.sonatype.org/sites/m2e
這款插件可以使eclipse直接導入或創建Maven項目,項目右鍵Run as可以直接使用或定製maven命令。

六、使用入門
Maven項目的核心是pom.xmlPOMProject Object Model,項目對象模型)定義了項目的基本信息,用於描述項目如何構建,聲明項目依賴,等等。
Maven最主要的命令:mvn clean compile、mvn clean test、mvn clean package、mvn clean install。執行test之前是會先執行compile的,執行package之前是會先執行test的,而類似地,install之前會執行package。我們可以在任何一個Maven項目中執行這些命令,而且我們已經清楚它們是用來做什麼的。

七、使用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    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章