Maven基礎(chǔ)

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í),可以使用 prepost 來定義這個(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ù)的集合。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芍秆,一起剝皮案震驚了整個(gè)濱河市惯疙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浪听,老刑警劉巖螟碎,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異迹栓,居然都是意外死亡掉分,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門克伊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酥郭,“玉大人,你說我怎么就攤上這事愿吹〔淮樱” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵犁跪,是天一觀的道長椿息。 經(jīng)常有香客問我,道長坷衍,這世上最難降的妖魔是什么寝优? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮枫耳,結(jié)果婚禮上乏矾,老公的妹妹穿的比我還像新娘。我一直安慰自己迁杨,他們只是感情好钻心,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铅协,像睡著了一般捷沸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狐史,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天痒给,我揣著相機(jī)與錄音坯钦,去河邊找鬼。 笑死侈玄,一個(gè)胖子當(dāng)著我的面吹牛展父,可吹牛的內(nèi)容都是我干的橘霎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼裆甩,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鲁豪!你這毒婦竟也來了潘悼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤爬橡,失蹤者是張志新(化名)和其女友劉穎治唤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糙申,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宾添,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柜裸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缕陕。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疙挺,靈堂內(nèi)的尸體忽然破棺而出扛邑,到底是詐尸還是另有隱情,我是刑警寧澤铐然,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布蔬崩,位于F島的核電站,受9級(jí)特大地震影響搀暑,放射性物質(zhì)發(fā)生泄漏沥阳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一险掀、第九天 我趴在偏房一處隱蔽的房頂上張望沪袭。 院中可真熱鬧,春花似錦樟氢、人聲如沸冈绊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽死宣。三九已至,卻和暖如春碴开,著一層夾襖步出監(jiān)牢的瞬間毅该,已是汗流浹背博秫。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眶掌,地道東北人挡育。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像朴爬,于是被迫代替她去往敵國和親即寒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1: maven是什么召噩? maven是Apache公司的開源項(xiàng)目母赵,是一個(gè)服務(wù)于Java項(xiàng)目的自動(dòng)化構(gòu)建工具,用來管...
    覆水無言閱讀 404評(píng)論 0 0
  • 坐標(biāo) maven管理項(xiàng)目依賴的底層基礎(chǔ)-坐標(biāo)具滴。坐標(biāo)元素:groupId凹嘲、artifactId、version构韵、pa...
    破曉追風(fēng)閱讀 450評(píng)論 0 0
  • Maven-Apache項(xiàng)目構(gòu)建工具周蹭,用來管理項(xiàng)目依賴 Maven構(gòu)建的項(xiàng)目非常小jar包在倉庫,而不在項(xiàng)目下面疲恢,...
    垃圾簡書_吃棗藥丸閱讀 595評(píng)論 0 3
  • Maven的基本了解 什么是Maven谷醉? Maven就是Apache下的一個(gè)開源項(xiàng)目。它是用純java開發(fā)的冈闭。是一...
    Bcome閱讀 2,818評(píng)論 0 7
  • 不管世界以什么樣的姿態(tài)呈現(xiàn)在我們面前俱尼,總有人認(rèn)為它荒蕪、枯燥和膚淺萎攒,也會(huì)有人覺得它豐富遇八、有趣而充滿意義。 我的悲...
    南冥河閱讀 470評(píng)論 0 3