《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都能大顯身手。

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版本
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、安裝目錄
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

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    
相關文章
相關標籤/搜索