Maven基礎(chǔ)
Maven是一個(gè)項(xiàng)目管理和整合工具。Maven 使用一個(gè)標(biāo)準(zhǔn)的目錄結(jié)構(gòu)避矢,為開發(fā)者提供了一套完整的構(gòu)建生命周期框架笤昨。 能夠在短時(shí)間內(nèi)使得每項(xiàng)工作都按照標(biāo)準(zhǔn)進(jìn)行。在創(chuàng)建報(bào)告按咒、檢查、構(gòu)建和測(cè)試自動(dòng)配置時(shí)但骨,Maven 可以讓開發(fā)者的工作變得更簡單励七。
總結(jié)Maven的構(gòu)建原理,生命周期奔缠,配置文件掠抬,倉庫等概念,寫一篇博客
Maven的構(gòu)建原理
- 在軟件開發(fā)過程中校哎,使用專門的工具來管理:編碼两波,加載依賴,編譯闷哆,測(cè)試雨女,打包,發(fā)布等過程阳准, 這種工具就叫做“項(xiàng)目構(gòu)建工具”。
- POM(Project Object Model) 代表工程對(duì)象模型馏臭,是使用 Maven 工作時(shí)的基本組建野蝇,是一個(gè) xml 文件,被放在工程根目錄下括儒,文件命名為 pom.xml绕沈。
- POM 包含了關(guān)于工程和各種配置細(xì)節(jié)的信息,Maven 使用這些信息構(gòu)建工程帮寻。
- POM 也包含了目標(biāo)和插件乍狐。當(dāng)執(zhí)行一個(gè)任務(wù)或者目標(biāo)時(shí),Maven 會(huì)查找當(dāng)前目錄下的 POM固逗,從其中讀取所需要的配置信息浅蚪,然后執(zhí)行目標(biāo)藕帜。
生命周期
1、定義:Maven 構(gòu)建生命周期定義了一個(gè)項(xiàng)目構(gòu)建跟發(fā)布的過程惜傲,Maven 有以下三個(gè)標(biāo)準(zhǔn)的生命周期:
- clean
- default(or build)
- site
2洽故、Clean 生命周期
Maven 的 clean 目標(biāo)(clean:clean)綁定到了 clean 生命周期的 clean 階段。它的 clean:clean 目標(biāo)通過刪除構(gòu)建目錄刪除了構(gòu)建輸出盗誊。執(zhí)行mvn clean 命令时甚,Maven 刪除了構(gòu)建目錄。當(dāng)我們執(zhí)行 mvn post-clean 命令時(shí)哈踱,Maven 調(diào)用 clean 生命周期荒适,它包含以下階段:
- pre-clean:執(zhí)行一些需要在clean之前完成的工作
- clean:移除所有上一次構(gòu)建生成的文件
- post-clean:執(zhí)行一些需要在clean之后立刻完成的工作
3、Default (or Build) 生命周期
這是 Maven 的主要生命周期开镣,被用于構(gòu)建應(yīng)用刀诬。包括下面的 23 個(gè)階段:
生命周期階段 | 描述 |
---|---|
validate | 檢查工程配置是否正確,完成構(gòu)建過程的所有必要信息是否能夠獲取到哑子。 |
initialize | 初始化構(gòu)建狀態(tài)舅列,例如設(shè)置屬性。 |
generate-sources | 生成編譯階段需要包含的任何源碼文件卧蜓。 |
process-sources | 處理源代碼帐要,例如,過濾任何值(filter any value)弥奸。 |
generate-resources | 生成工程包中需要包含的資源文件榨惠。 |
process-resources | 拷貝和處理資源文件到目的目錄中,為打包階段做準(zhǔn)備盛霎。 |
compile | 編譯工程源碼赠橙。 |
process-classes | 處理編譯生成的文件,例如 Java Class 字節(jié)碼的加強(qiáng)和優(yōu)化愤炸。 |
generate-test-sources | 生成編譯階段需要包含的任何測(cè)試源代碼期揪。 |
process-test-sources | 處理測(cè)試源代碼,例如规个,過濾任何值(filter any values)凤薛。 |
test-compile | 編譯測(cè)試源代碼到測(cè)試目的目錄。 |
process-test-classes | 處理測(cè)試代碼文件編譯后生成的文件诞仓。 |
test | 使用適當(dāng)?shù)膯卧獪y(cè)試框架(例如JUnit)運(yùn)行測(cè)試缤苫。 |
prepare-package | 在真正打包之前,為準(zhǔn)備打包執(zhí)行任何必要的操作墅拭。 |
package | 獲取編譯后的代碼活玲,并按照可發(fā)布的格式進(jìn)行打包,例如 JAR、WAR 或者 EAR 文件舒憾。 |
pre-integration-test | 在集成測(cè)試執(zhí)行之前镀钓,執(zhí)行所需的操作。例如珍剑,設(shè)置所需的環(huán)境變量掸宛。 |
integration-test | 處理和部署必須的工程包到集成測(cè)試能夠運(yùn)行的環(huán)境中。 |
post-integration-test | 在集成測(cè)試被執(zhí)行后執(zhí)行必要的操作招拙。例如唧瘾,清理環(huán)境。 |
verify | 運(yùn)行檢查操作來驗(yàn)證工程包是有效的别凤,并滿足質(zhì)量要求饰序。 |
install | 安裝工程包到本地倉庫中,該倉庫可以作為本地其他工程的依賴规哪。 |
deploy | 拷貝最終的工程包到遠(yuǎn)程倉庫中求豫,以共享給其他開發(fā)人員和工程。 |
- 當(dāng)一個(gè)階段通過 Maven 命令調(diào)用時(shí)诉稍,例如 mvn compile蝠嘉,只有該階段之前以及包括該階段在內(nèi)的所有階段會(huì)被執(zhí)行。
- 不同的 maven 目標(biāo)將根據(jù)打包的類型(JAR / WAR / EAR)杯巨,被綁定到不同的 Maven 生命周期階段蚤告。
- 當(dāng)需要在某個(gè)特定階段之前或之后執(zhí)行目標(biāo)時(shí),可以使用 pre 和 post 來定義這個(gè)目標(biāo)服爷。
- 目標(biāo)表示一個(gè)特定的杜恰、對(duì)構(gòu)建和管理工程有幫助的任務(wù)。它可以綁定 0 個(gè)或多個(gè)構(gòu)建階段仍源。沒有綁定任何構(gòu)建階段的目標(biāo)可以在構(gòu)建生命周期之外被直接調(diào)用執(zhí)行心褐。
4、Site 生命周期
Maven Site 插件一般用來創(chuàng)建新的報(bào)告文檔笼踩、部署站點(diǎn)等逗爹。包括4個(gè)階段:
- pre-site
- site
- post-site
- site-deploy
配置文件(Profile)
1、定義:構(gòu)建配置文件是一組配置的集合嚎于,用來設(shè)置或者覆蓋 Maven 構(gòu)建的默認(rèn)配置掘而。使用構(gòu)建配置文件,可以為不同的環(huán)境定制構(gòu)建過程
2匾旭、Profile 類型
Profile 主要有三種類型:
類型 | 在哪里定義 |
---|---|
Per Project | 定義在工程 POM 文件 pom.xml 中 |
Per User | 定義在 Maven 設(shè)置 xml 文件中 (%USER_HOME%/.m2/settings.xml) |
Global | 定義在 Maven 全局配置 xml 文件中 (%M2_HOME%/conf/settings.xml) |
3、Profile 激活
Maven 的 Profile 能夠通過幾種不同的方式激活圃郊。
- 顯式使用命令控制臺(tái)輸入
- 通過 maven 設(shè)置
- 基于環(huán)境變量(用戶 / 系統(tǒng)變量)
- 操作系統(tǒng)配置(例如价涝,Windows family)
- 現(xiàn)存 / 缺失 文件
倉庫
1、定義:在 Maven 的術(shù)語中持舆,倉庫是一個(gè)位置(place)色瘩,例如目錄伪窖,可以存儲(chǔ)所有的工程 jar 文件、library jar 文件居兆、插件或任何其他的工程指定的文件覆山。Maven 倉庫有三種類型:
- 本地(local)
- 中央(central)
- 遠(yuǎn)程(remote)
2、本地倉庫
- Maven 本地倉庫是機(jī)器上的一個(gè)文件夾泥栖,保存工程的所有依賴(library jar簇宽、plugin jar 等)。在第一次運(yùn)行任何 maven 命令的時(shí)候自動(dòng)創(chuàng)建吧享。
- Maven 會(huì)自動(dòng)下載所有依賴的 jar 文件到本地倉庫中魏割,Maven 本地倉庫默認(rèn)被創(chuàng)建在 %USER_HOME% 目錄下。要修改默認(rèn)位置钢颂,在 %M2_HOME%\conf 目錄中的 Maven 的 settings.xml 文件中定義另一個(gè)路徑钞它。
3、中央倉庫
Maven 中央倉庫是由 Maven 社區(qū)提供的倉庫殊鞭,其中包含了大量常用的庫遭垛,需要網(wǎng)絡(luò)才能訪問。
4操灿、遠(yuǎn)程倉庫
開發(fā)人員自己定制倉庫锯仪,包含了所需要的代碼庫或者其他工程中用到的 jar 文件。
Maven 依賴搜索順序
- 步驟 1 - 在本地倉庫中搜索牲尺,如果找不到卵酪,執(zhí)行步驟 2,如果找到了則執(zhí)行其他操作谤碳。
- 步驟 2 - 在中央倉庫中搜索溃卡,如果找不到,并且有一個(gè)或多個(gè)遠(yuǎn)程倉庫已經(jīng)設(shè)置蜒简,則執(zhí)行步驟 4瘸羡,如果找到了則下載到本地倉庫中已被將來引用。
- 步驟 3 - 如果遠(yuǎn)程倉庫沒有被設(shè)置搓茬,Maven 將簡單的停滯處理并拋出錯(cuò)誤(無法找到依賴的文件)犹赖。
- 步驟 4 - 在一個(gè)或多個(gè)遠(yuǎn)程倉庫中搜索依賴的文件,如果找到則下載到本地倉庫已被將來引用卷仑,否則 Maven 將停止處理并拋出錯(cuò)誤(無法找到依賴的文件)峻村。
插件
Maven 實(shí)際上是一個(gè)依賴插件執(zhí)行的框架,每個(gè)任務(wù)實(shí)際上是由插件完成锡凝。
常用插件:
插件 | 描述 |
---|---|
clean | 構(gòu)建之后清理目標(biāo)文件粘昨。刪除目標(biāo)目錄。 |
compiler | 編譯 Java 源文件。 |
surefile | 運(yùn)行 JUnit 單元測(cè)試张肾。創(chuàng)建測(cè)試報(bào)告芭析。 |
jar | 從當(dāng)前工程中構(gòu)建 JAR 文件。 |
war | 從當(dāng)前工程中構(gòu)建 WAR 文件吞瞪。 |
javadoc | 為工程生成 Javadoc馁启。 |
antrun | 從構(gòu)建過程的任意一個(gè)階段中運(yùn)行一個(gè) ant 任務(wù)的集合。 |