maven可以用來管理項(xiàng)目中用到的jar包,以前都是把jar包下載好放在項(xiàng)目的lib里面治专,使用maven后褥傍,它由pom.xml文件指定需要用到的jar包,并把jar把從指定的倉(cāng)庫(kù)(私庫(kù)或配置的鏡像倉(cāng)庫(kù)或maven默認(rèn)的中央倉(cāng)庫(kù))下載到本地的指定磁盤中宋雏。
maven還可以用來編譯打包項(xiàng)目芜飘,以前我都是利用eclipse工具來打包項(xiàng)目,現(xiàn)在可以直接利用maven命令對(duì)項(xiàng)目進(jìn)行編譯打包磨总。
項(xiàng)目目錄結(jié)構(gòu)
src
| ---- main
| ---- ---- java
| ---- ---- ---- package
| ---- ---- resources
| ---- test
| ---- ---- java
| ---- ---- ---- package
| ---- ---- resources
pom.xml
常用命令
mvn -v 查看版本
mvn -clean 刪除target
mvn -compile 編譯
mvn -test 測(cè)試
mvn -package 打包
mvn -install 安裝jar包到本地倉(cāng)庫(kù)
maven命令創(chuàng)建項(xiàng)目
mvn archetype:generate
-DgroupId=組織名(公司網(wǎng)址的反寫+項(xiàng)目名)
-DartifactId=當(dāng)前項(xiàng)目在組織中的唯一標(biāo)志(項(xiàng)目名+模塊名)
-Dversion=版本號(hào)(大版本號(hào).分支版本號(hào).小版本號(hào).snapshot)
| ---- snapshot快照
| ---- alpht內(nèi)部測(cè)試
| ---- beta公測(cè)
| ---- Release穩(wěn)定
| ---- GA正式發(fā)布
-Dpackage=代碼所存在的包
maven坐標(biāo)與倉(cāng)庫(kù)
坐標(biāo):groupId + artifactId + version
倉(cāng)庫(kù):
1.本地倉(cāng)庫(kù)(更改配置文件中的localRepository)
2.遠(yuǎn)程倉(cāng)庫(kù)
3.鏡像倉(cāng)庫(kù)(更改配置文件中的mirror)
pom.xml
依賴
<scope>compile</scope> 依賴范圍
可選值有:
compile (默認(rèn))編譯嗦明,測(cè)試,運(yùn)行時(shí)有效蚪燕。他表示被依賴項(xiàng)目需要參與當(dāng)前項(xiàng)目的編譯娶牌,還有后續(xù)的測(cè)試,運(yùn)行周期也參與其中馆纳,是一個(gè)比較強(qiáng)的依賴诗良。打包的時(shí)候通常需要包含進(jìn)去;
provided 編譯鲁驶,測(cè)試時(shí)有效鉴裹。打包的時(shí)候可以不用包進(jìn)去,別的設(shè)施會(huì)提供钥弯。事實(shí)上該依賴?yán)碚撋峡梢詤⑴c編譯径荔,測(cè)試,運(yùn)行等周期脆霎。相當(dāng)于compile总处,但是打包階段做了exclude操作;
runtime 測(cè)試绪穆,運(yùn)行時(shí)有效辨泳。表示被依賴項(xiàng)目無需參與項(xiàng)目的編譯,不過后期的測(cè)試和運(yùn)行周期需要其參與玖院。與compile相比菠红,跳過了編譯而已。例如JDBC驅(qū)動(dòng)难菌,適用運(yùn)行和測(cè)試階段
test 測(cè)試時(shí)有效试溯。依賴項(xiàng)目?jī)H僅參與測(cè)試相關(guān)的工作,包括測(cè)試代碼的編譯和執(zhí)行郊酒,不會(huì)被打包遇绞,例如:junit
system 編譯键袱,測(cè)試,運(yùn)行時(shí)有效 (與本機(jī)系統(tǒng)相關(guān)聯(lián))摹闽。從參與度來說蹄咖,和provided相同,不過被依賴項(xiàng)不會(huì)從maven倉(cāng)庫(kù)下載付鹿,而是從本地文件系統(tǒng)拿澜汤。需要添加systemPath的屬性來定義路徑
import 導(dǎo)入。只使用在dependencyManagement中舵匾,表示從其他pom中導(dǎo)入dependecy的配置
依賴傳遞規(guī)則: 短路優(yōu)先俊抵、 先聲明先優(yōu)先(路徑長(zhǎng)度相同)
<optional>false</optional> 可選依賴
應(yīng)用場(chǎng)景: A 依賴B, B 依賴C時(shí)
當(dāng)B中對(duì)C設(shè)為<optional>true</optional>時(shí), A中如果沒有顯式的引入C, 則A不依賴C, 即A可以自己選擇是否依賴C。默認(rèn)<optional>的值為false, 及子項(xiàng)目必須依賴
聚合和繼承
聚合坐梯,在父項(xiàng)目中利用 <modules>徽诲,可以把子項(xiàng)目聚合在一起進(jìn)行操作
繼承,在父項(xiàng)目中利用 <dependencyManagement>對(duì)引入的包進(jìn)行管理吵血,主要是版本的統(tǒng)一管理谎替, 子項(xiàng)目中用<parent>指定父項(xiàng)目,可繼承父項(xiàng)目引入的包践瓷,同時(shí)在引入dependencyManagement中的包時(shí)不用指定版本院喜,因?yàn)榘姹緯?huì)被繼承