Maven是一個(gè)項(xiàng)目管理工具,它包含了一個(gè)項(xiàng)目對(duì)象模型(POM:Project Object Model),一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目生命周期(Project LifeCycle),一個(gè)依賴管理系統(tǒng)(Dependency managerment System),和用來(lái)運(yùn)行定義在生命周期(phase)中插件(plugin)目標(biāo)(goal)的邏輯。
①首先,maven是一個(gè)優(yōu)秀的項(xiàng)目構(gòu)建工具。使用maven,可以很方便的對(duì)項(xiàng)目進(jìn)行分模塊構(gòu)建,這樣在開發(fā)和測(cè)試打包部署時(shí),效率會(huì)提高很多。
②其次,maven可以進(jìn)行依賴的管理。使用maven,可以將不同系統(tǒng)的依賴進(jìn)行統(tǒng)一管理,并且可以進(jìn)行依賴之間的傳遞和繼承。
1)install 本地安裝, 包含編譯,打包,安裝到本地倉(cāng)庫(kù)
2)clean 清除已編譯信息,刪除工程中的target目錄。
3)compile 只編譯。javac命令
4)deploy 部署。常見于結(jié)合私服使用的命令,相當(dāng)于是install+上傳jar到私服。
5)package 打包。包含編譯,打包兩個(gè)功能。
在Maven中有三套相互獨(dú)立的生命周期,請(qǐng)注意這里說(shuō)的是“三套”,而且“相互獨(dú)立”,這三套生命周期分別是:
(1)Clean清理項(xiàng)目: 在進(jìn)行真正的構(gòu)建之前進(jìn)行一些清理工作。 mvn clean
(2)Default構(gòu)建項(xiàng)目: 構(gòu)建的核心部分,編譯,測(cè)試,打包,部署等等。 mvn compile test package install deploy
(3)Site生成項(xiàng)目站點(diǎn): 生成項(xiàng)目報(bào)告,站點(diǎn),發(fā)布站點(diǎn)。
Maven倉(cāng)庫(kù)是基于簡(jiǎn)單文件系統(tǒng)存儲(chǔ)的,集中化管理Java API資源(構(gòu)件)的一個(gè)服務(wù)。倉(cāng)庫(kù)中的任何一個(gè)構(gòu)件都有其唯一的坐標(biāo),根據(jù)這個(gè)坐標(biāo)可以定義其在倉(cāng)庫(kù)中的唯一存儲(chǔ)路徑。得益于 Maven 的坐標(biāo)機(jī)制,任何 Maven項(xiàng)目使用任何一個(gè)構(gòu)件的方式都是完全相同的,Maven 可以在某個(gè)位置統(tǒng)一存儲(chǔ)所有的 Maven 項(xiàng)目共享的構(gòu)件,這個(gè)統(tǒng)一的位置就是倉(cāng)庫(kù),項(xiàng)目構(gòu)建完畢后生成的構(gòu)件也可以安裝或者部署到倉(cāng)庫(kù)中,供其它項(xiàng)目使用。
對(duì)于Maven來(lái)說(shuō),倉(cāng)庫(kù)分為兩類:本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)。
1)POM工程
POM工程是邏輯工程。用在父級(jí)工程或聚合工程中。用來(lái)做jar包的版本控制。
2)JAR工程
將會(huì)打包成jar用作jar包使用。即常見的本地工程 - Java Project。
3)WAR工程
將會(huì)打包成war,發(fā)布在服務(wù)器上的工程。如網(wǎng)站或服務(wù)。即常見的網(wǎng)絡(luò)工程 - Dynamic Web Project。war工程默認(rèn)沒有WEB-INF目錄及web.xml配置文件,IDE通常會(huì)顯示工程錯(cuò)誤,提供完整工程結(jié)構(gòu)可以解決。
使用<dependency>的<exclusion>元素將會(huì)引起沖突的元素排除。
● 可能由于網(wǎng)絡(luò)波動(dòng),每有下載完成,又緩存了,這個(gè)時(shí)候下載多少次都會(huì)失敗,解決辦法就是去本地倉(cāng)庫(kù)將對(duì)應(yīng)的依賴全部刪除再重新下載
● 由于依賴傳遞帶來(lái)的版本沖突問(wèn)題,解決辦法就是排除依賴。