maven是什么?
Maven是一個(gè)跨平臺(tái)的項(xiàng)目管理工具朝扼,主要服務(wù)于基于Java平臺(tái)的項(xiàng)目構(gòu)建、依賴管理和項(xiàng)目信息管理丑瞧。
- 依賴管理,根據(jù)坐標(biāo)從倉(cāng)庫(kù)中尋找構(gòu)件蜀肘。
- 構(gòu)建(build)工具绊汹,maven抽象了構(gòu)建生命周期并為絕大部分構(gòu)建任務(wù)提供了已實(shí)現(xiàn)的插件。
- 項(xiàng)目信息管理
一扮宠、倉(cāng)庫(kù)
maven根據(jù)
坐標(biāo)
尋找構(gòu)件流程
當(dāng)maven根據(jù)坐標(biāo)尋找構(gòu)件時(shí)西乖,首先會(huì)去本地倉(cāng)庫(kù)查看是否存在該構(gòu)件,若本地倉(cāng)庫(kù)已經(jīng)存在該構(gòu)件坛增,則直接使用获雕;若本地倉(cāng)庫(kù)不存在該構(gòu)件,則需要去遠(yuǎn)程倉(cāng)庫(kù)查找此構(gòu)件收捣,在遠(yuǎn)程倉(cāng)庫(kù)中查找到該構(gòu)件后典鸡,需要將其下載到本地倉(cāng)庫(kù)后再使用。如果本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)都沒(méi)有該構(gòu)件坏晦,則maven會(huì)報(bào)錯(cuò)萝玷。
坐標(biāo):groupId, artifactId, version三個(gè)元素定義了一個(gè)項(xiàng)目的基本坐標(biāo)
<groupId>com.example</groupId>
<artifactId>hello-spring-boot-starter-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
構(gòu)件:jar包等
1. 本地倉(cāng)庫(kù)
安裝maven后嫁乘,在不執(zhí)行任何maven命令前,不存在本地倉(cāng)庫(kù)目錄球碉。當(dāng)用戶執(zhí)行第一條maven命令后蜓斧,會(huì)在用戶目錄下.m2/repository/創(chuàng)建本地倉(cāng)庫(kù)。
若希望自定義本地倉(cāng)庫(kù)目錄睁冬,可以在pom.xml中進(jìn)行如下配置挎春。
<settings>
<localRepository>D://install//localres</localRepository>
</settings>
2. 遠(yuǎn)程倉(cāng)庫(kù)
中央倉(cāng)庫(kù)是maven默認(rèn)的遠(yuǎn)程倉(cāng)庫(kù),maven的安裝文件中自帶了中央倉(cāng)庫(kù)的配置豆拨,其id為centeral直奋。
私服是一種特殊的遠(yuǎn)程倉(cāng)庫(kù),它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù)施禾,它代理廣域網(wǎng)上的遠(yuǎn)程倉(cāng)庫(kù)脚线,為局域網(wǎng)內(nèi)的maven用戶提供服務(wù)。當(dāng)maven下載構(gòu)件時(shí)弥搞,先去私服上查找該構(gòu)件邮绿,若私服上沒(méi)有該構(gòu)件,則從遠(yuǎn)程倉(cāng)庫(kù)下載構(gòu)件緩存至私服攀例,再為maven用戶的下載請(qǐng)求提供服務(wù)船逮。
若希望配置遠(yuǎn)程倉(cāng)庫(kù),可以在pom.xml中進(jìn)行如下配置粤铭。
<repositories>
<repository>
<id>central</id>
<name>libs-releases</name>
<url></url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<name>libs-snapshots</name>
<url></url>
<snapshots />
</repository>
</repositories>
大部分遠(yuǎn)程倉(cāng)庫(kù)無(wú)需認(rèn)證即可訪問(wèn)挖胃,但有時(shí)出于安全考慮,我們需要認(rèn)證信息才能訪問(wèn)一些遠(yuǎn)程倉(cāng)庫(kù)梆惯」诮荆可以在pom.xml中進(jìn)行如下配置來(lái)配置倉(cāng)庫(kù)認(rèn)證信息。
<servers>
<server>
<id></id>
<username></username>
<password></password>
</server>
</servers>
3. 鏡像
如果倉(cāng)庫(kù)X能夠提供倉(cāng)庫(kù)Y存儲(chǔ)的所有內(nèi)容加袋,那么就可以認(rèn)為X是Y的一個(gè)鏡像凛辣。
在pom.xml中進(jìn)行如下配置,可以使用阿里云鏡像代替中央倉(cāng)庫(kù)职烧。
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
二扁誓、生命周期和插件
階段 | 處理 | 描述 |
---|---|---|
驗(yàn)證 validate | 驗(yàn)證項(xiàng)目 | 驗(yàn)證項(xiàng)目是否正確且所有必須信息是可用的 |
編譯 compile | 執(zhí)行編譯 | 源代碼編譯在此階段完成 |
測(cè)試 Test | 測(cè)試 | 使用適當(dāng)?shù)膯卧獪y(cè)試框架(例如JUnit)運(yùn)行測(cè)試。 |
包裝 package | 打包 | 創(chuàng)建JAR/WAR包如在 pom.xml 中定義提及的包 |
檢查 verify | 檢查 | 對(duì)集成測(cè)試的結(jié)果進(jìn)行檢查蚀之,以保證質(zhì)量達(dá)標(biāo) |
安裝 install | 安裝 | 安裝打包的項(xiàng)目到本地倉(cāng)庫(kù)蝗敢,以供其他項(xiàng)目使用 |
部署 deploy | 部署 | 拷貝最終的工程包到遠(yuǎn)程倉(cāng)庫(kù)中,以共享給其他開(kāi)發(fā)人員和工程 |
- package命令完成了項(xiàng)目編譯足删、單元測(cè)試寿谴、打包功能,但沒(méi)有把打好的可執(zhí)行jar包(war包或其它形式的包)布署到本地maven倉(cāng)庫(kù)和遠(yuǎn)程maven私服倉(cāng)庫(kù)失受;
- install命令完成了項(xiàng)目編譯讶泰、單元測(cè)試咏瑟、打包功能,同時(shí)把打好的可執(zhí)行jar包(war包或其它形式的包)布署到本地maven倉(cāng)庫(kù)痪署,但沒(méi)有布署到遠(yuǎn)程maven私服倉(cāng)庫(kù)码泞;
- deploy命令完成了項(xiàng)目編譯、單元測(cè)試狼犯、打包功能余寥,同時(shí)把打好的可執(zhí)行jar包(war包或其它形式的包)布署到本地maven倉(cāng)庫(kù)和遠(yuǎn)程maven私服倉(cāng)庫(kù);
Maven 有以下三個(gè)標(biāo)準(zhǔn)的生命周期:
- clean:項(xiàng)目清理的處理
- default(或 build):項(xiàng)目部署的處理
- site:項(xiàng)目站點(diǎn)文檔創(chuàng)建的處理