舉例講解Maven的使用及生命周期
通過(guò)實(shí)際對(duì)maven進(jìn)行操作講解maven的使用
maven安裝
maven官方下載地址
http://maven.apache.org/download.cgi
配置環(huán)境變量
==注意:安裝maven之前,必須先確保你的機(jī)器中已經(jīng)安裝了JDK,否則無(wú)法編譯==
- 解壓下載的壓縮包
- 添加環(huán)境變量MAVEN_HOME,值為解壓后的文件夾的路徑,例如放在D盤(新裝的時(shí)候應(yīng)該是新建,我這里已經(jīng)裝好,只是為了舉例),如圖所示:

- 在Path環(huán)境變量的變量值末尾添加
%MAVEN_HOME%\bin
- 在cmd輸入
mvn –version
如果出現(xiàn)maven和jdk的版本信息,說(shuō)明配置成功,如下圖:

啟用代理訪問(wèn)
依據(jù)自身網(wǎng)絡(luò)環(huán)境決定是否添加代理,如果需要添加,在 Maven 的配置文件中設(shè)置代理服務(wù)器:{MAVEN_HOME}/conf/settings.xml,找到下面這段,改成你的代理服務(wù)器。
<proxies>
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
|
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
--></proxies>
把注釋去掉,host這里填寫代理服務(wù)器的地址(可以用IP)以及port端口,如果需要用戶名/密碼認(rèn)證,則填寫username/password節(jié)點(diǎn),否則username/password這二個(gè)節(jié)點(diǎn)去掉,nonProxyHosts表示某些地址不需要經(jīng)過(guò)代理服務(wù)器,多個(gè)地址之間用|分隔,支持通配符,比如172.156.*
本地倉(cāng)庫(kù)配置
從中央倉(cāng)庫(kù)下載的jar包,都會(huì)統(tǒng)一存放到本地倉(cāng)庫(kù)中。我們需要配置本地倉(cāng)庫(kù)的位置。默認(rèn)是在c盤的用戶下,但一般我們都不用這個(gè)地址。
打開{MAVEN_HOME}/conf/settings.xml,修改倉(cāng)庫(kù)地址:
<localRepository>D:\maven\m2\repository</localRepository>可以修改成這樣,便于識(shí)別就好。
使用命令行創(chuàng)建基本 java Maven項(xiàng)目
在創(chuàng)建之前先了解一下Maven的版本規(guī)范,對(duì)創(chuàng)建項(xiàng)目也是有幫助的,創(chuàng)建項(xiàng)目是會(huì)用得到。
maven使用如下幾個(gè)要素來(lái)唯一定位某一個(gè)輸出物:
groudId:
團(tuán)體、組織的標(biāo)識(shí)符。團(tuán)體標(biāo)識(shí)的約定是,它以創(chuàng)建這個(gè)項(xiàng)目的組織名稱的逆向域名(reverse domain name)開頭。一般對(duì)應(yīng)著JAVA的包的結(jié)構(gòu)。例如org.apache
artifactId:
單獨(dú)項(xiàng)目的唯一標(biāo)識(shí)符。也可以理解為項(xiàng)目名稱。比如我們的tomcat, commons等。不要在artifactId中包含點(diǎn)號(hào)(.)。
version:
一個(gè)項(xiàng)目的特定版本。
packaging:
項(xiàng)目的類型,默認(rèn)是jar,描述了項(xiàng)目打包后的輸出。類型為jar的項(xiàng)目產(chǎn)生一個(gè)JAR文件,類型為war的項(xiàng)目產(chǎn)生一個(gè)web應(yīng)用。
maven有自己的版本規(guī)范,一般是如下定義 <major version>.<minor version>.<incremental version>-<qualifier> ,比如1.2.3-beta-01。要說(shuō)明的是,maven自己判斷版本的算法是major,minor,incremental部分用數(shù)字比較,qualifier部分用字符串比較,所以要小心 alpha-2和alpha-15的比較關(guān)系,最好用 alpha-02的格式。
maven在版本管理時(shí)候可以使用幾個(gè)特殊的字符串 SNAPSHOT,LATEST,RELEASE。比如"1.0-SNAPSHOT"。各個(gè)部分的含義和處理邏輯如下說(shuō)明:
SNAPSHOT
這個(gè)版本一般用于開發(fā)過(guò)程中,表示不穩(wěn)定的版本。
LATEST
指某個(gè)特定構(gòu)件的最新發(fā)布,這個(gè)發(fā)布可能是一個(gè)發(fā)布版,也可能是一個(gè)snapshot版,具體看哪個(gè)時(shí)間最后。
RELEASE
指最后一個(gè)發(fā)布版。
創(chuàng)建Maven項(xiàng)目(第一種)
- 先創(chuàng)建項(xiàng)目的根目錄,比如F:\mvnTest,命令行窗口下輸入下面兩個(gè)命令:
cd /d F:\mvnTest
mvn archetype:generate
- 這里會(huì)執(zhí)行一會(huì),從網(wǎng)絡(luò)獲取項(xiàng)目模板列表,等到如下圖,直接回車,

-
出現(xiàn)下圖,繼續(xù)回車,
mvn 選擇版本2 出現(xiàn)下圖,填寫項(xiàng)目基本信息,如下圖,

- 確認(rèn)這些信息之后,出現(xiàn)下圖就表示項(xiàng)目創(chuàng)建成功,如下圖,

6.項(xiàng)目創(chuàng)建成功后,觀察工程結(jié)構(gòu),這個(gè)生成項(xiàng)目就是標(biāo)準(zhǔn)的maven 項(xiàng)目。

這是全世界maven項(xiàng)目的通用約定,請(qǐng)記住這些固定的目錄結(jié)構(gòu)。
創(chuàng)建Maven項(xiàng)目(第二種)
使用命令:
mvn archetype:generate -DgroupId=pertrochina.xjyt -DartifactId=mvnTest2 -DinteractiveMode=false

編譯項(xiàng)目
先進(jìn)入剛才創(chuàng)建項(xiàng)目的根目錄:
cd /d F:\mvnTest\mvnTest
mvn clean compile或者mvn compile
進(jìn)行編譯,如下圖顯示,成功編譯。

單元測(cè)試
使用命令:mvn clean test或者mvn test

如果單元測(cè)試不通過(guò),會(huì)提示出錯(cuò)信息,注意看輸出。
==注:從輸出上可以發(fā)現(xiàn),test前,會(huì)先執(zhí)行compile,即先編譯,再執(zhí)行單元測(cè)試.==
項(xiàng)目打包
通常我們會(huì)把java項(xiàng)目打包成jar包或war包,maven中打包的命令為
mvn clean package或者mvn package

運(yùn)行完后,會(huì)在target目錄下生成jar包
==注:從輸出 可以發(fā)現(xiàn),package前,會(huì)先執(zhí)行compile,再執(zhí)行test,最后才是package打包.==
項(xiàng)目運(yùn)行
進(jìn)入F:\mvnTest\mvntest\target\classes,運(yùn)行下面的命令:
java pertrochina.xjyt.App

在這里java項(xiàng)目就可以使用了。需要什么就添加就可以了。
