Maven學習總結

Maven的定義:
Apache Maven 是一套軟件工程管理和整合工具。基于工程對象模型(POM)的概念,通過一個中央信息管理模塊,Maven 能夠管理項目的構建、報告和文檔。

Maven能做什么?
構建
文檔生成
報告
依賴
SCMs
發布
分發
郵件列表

主要是能簡化工程的構建過程,使其標準化。

POM
是一個xml文件,包含了工程和各種配置細節的信息。必須包含project元素和三個必須的字段:groupId, artifactId,version。通過這三個標識在中央倉庫中確定位置。
節點
描述

groupId
這是工程組的標識。它在一個組織或者項目中通常是唯一的。例如,一個銀行組織 com.company.bank 擁有所有的和銀行相關的項目。公司名或組織名

artifactId
這是工程的標識。它通常是工程的名稱。例如,消費者銀行。groupId 和 artifactId 一起定義了 artifact 在倉庫中的位置。項目名或項目名-子項目名

version
這是工程的版本號。在 artifact 的倉庫中,它用來區分不同的版本。例如: com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1.

查看 Super POM(父POM)默認配置的一個簡單方法是執行以下命令:
mvn help:effective-pom

構建生命周期
Maven有三個標準的生命周期
clean:用于刪除構建目錄。
default(or build):有編譯,測試,打包,部署等等操作都是在這個一個階段進行。
site:一般用來創建新的報告文檔、部署站點。
1.clean 包含以下階段:
pre-clean
clean
post-clean

2.default(or build)有23中階段:
生命周期階段
描述

validate
檢查工程配置是否正確,完成構建過程的所有必要信息是否能夠獲取到。

initialize
初始化構建狀態,例如設置屬性。

generate-sources
生成編譯階段需要包含的任何源碼文件。

process-sources
處理源代碼,例如,過濾任何值(filter any value)。

generate-resources
生成工程包中需要包含的資源文件。

process-resources
拷貝和處理資源文件到目的目錄中,為打包階段做準備。

compile
編譯工程源碼。

process-classes
處理編譯生成的文件,例如 Java Class 字節碼的加強和優化。

generate-test-sources
生成編譯階段需要包含的任何測試源代碼。

process-test-sources
處理測試源代碼,例如,過濾任何值(filter any values)。

test-compile
編譯測試源代碼到測試目的目錄。

process-test-classes
處理測試代碼文件編譯后生成的文件。

test
使用適當的單元測試框架(例如JUnit)運行測試。

prepare-package
在真正打包之前,為準備打包執行任何必要的操作。

package
獲取編譯后的代碼,并按照可發布的格式進行打包,例如 JAR、WAR 或者 EAR 文件。

pre-integration-test
在集成測試執行之前,執行所需的操作。例如,設置所需的環境變量。

integration-test
處理和部署必須的工程包到集成測試能夠運行的環境中。

post-integration-test
在集成測試被執行后執行必要的操作。例如,清理環境。

verify
運行檢查操作來驗證工程包是有效的,并滿足質量要求。

install
安裝工程包到本地倉庫中,該倉庫可以作為本地其他工程的依賴。

deploy
拷貝最終的工程包到遠程倉庫中,以共享給其他開發人員和工程。

  1. site有以下階段:
    pre-site
    site
    post-site
    site-deploy

構建配置文件
Profile 在 pom.xml 中使用 activeProfiles / profiles 元素指定,并且可以用很多方式觸發。Profile 在構建時修改 POM,可以為不同的環境定制構建過程,比如開發環境,測試環境,產品環境。
Profile 主要有三種類型:
類型
在哪里定義

Per Project
定義在工程 POM 文件 pom.xml 中

Per User
定義在 Maven 設置 xml 文件中 (%USER_HOME%/.m2/settings.xml)

Global
定義在 Maven 全局配置 xml 文件中 (%M2_HOME%/conf/settings.xml)

Profile 有以下幾種方式激活:
顯式使用命令控制臺輸入
通過 maven 設置
基于環境變量(用戶 / 系統變量)
操作系統配置(例如,Windows family)
現存 / 缺失 文件具體怎么激活還是需要項目實戰才會有深刻的印象,這里就不具體描述了,不懂的話就去google

倉庫
用來放置存儲所有的工程 jar 文件、libraryjar文件、插件或任何其他的工程指定的文件。
本地倉庫:本機上的文件夾。
中央倉庫:由Maven社區管理,不需要配置,需要通過網絡才能訪問。
遠程倉庫:由開發人員自己定制的倉庫。

Maven依賴搜尋順序:
步驟 1 - 在本地倉庫中搜索,如果找不到,執行步驟 2,如果找到了則執行其他操作。
步驟 2 - 在中央倉庫中搜索,如果找不到,并且有一個或多個遠程倉庫已經設置,則執行步驟4,如果找到了則下載到本地倉庫中已被將來引用。
步驟 3 - 如果遠程倉庫沒有被設置,Maven 將簡單的停滯處理并拋出錯誤(無法找到依賴的文件)。
步驟 4 - 在一個或多個遠程倉庫中搜索依賴的文件,如果找到則下載到本地倉庫已被將來引用,否則 Maven 將停止處理并拋出錯誤(無法找到依賴的文件)。

插件
執行插件的語法如下:
mvn [plugin-name]:[goal-name] ;插件名稱:目標名稱

插件是在 pom.xml 中使用 plugins 元素定義的。
每個插件可以有多個目標。
你可以定義階段,插件會使用它的 phase元素開始處理。我們已經使用了 clean 階段。
你可以通過綁定到插件的目標的方式來配置要執行的任務。我們已經綁定了 echo 任務到 maven-antrun-plugin 的 run 目標。
就是這樣,Maven 將處理剩下的事情。它將下載本地倉庫中獲取不到的插件,并開始處理。插件我是這么理解的,就是感覺跟使用bash命令差不多。

依賴關系

1.傳遞性依賴
不用擔心引入多余的依賴,Maven會解析各個直接依賴的POM,將那些必要的間接依賴,以傳遞性依賴的形式引入到當前的項目中去。1. 路徑最近者優先。2. 第一聲明者優先,即順序最靠前的那個依賴優先

2.排除依賴
聲明exclusion的時候只需要groupId和artifactId即可,而不需要version元素,這是因為只需要groupId和artifactId就能唯一定位依賴圖中的某個依賴。換句話說,Maven解析后的依賴中,不可能出現groupId和artifactId相同,但是version不同的兩個依賴。

總結:
這個應該是在成熟的團隊使用的。順便了解下也是不錯的。提高篇的傳送門 以下是推薦類似功能的工具,思路都差不多。我錯過了ant時代,我也錯過了maven時代,但我不能錯過gradle時代!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容