maven 是一款強大的項目管理與構建工具,在 Java 開發中尤為常用,結合這張圖,從核心功能、倉庫體系、工作流程三方面快速了解:
一、核心作用
- 項目構建:自動完成編譯、測試、打包、部署等流程(比如把?
.java
?編譯成?.class
、打成?jar
/war
?包 )。 - 依賴管理:幫你 “自動找 jar 包”,不用手動下載、復制粘貼,通過簡單配置就能引入框架(如 Spring、MyBatis )。
二、倉庫體系(重點)
Maven 用三級倉庫管理 jar 包,流程像 “接力賽”:
- 本地倉庫(藍色):你電腦里的一個文件夾(比如?
C:\Users\用戶名\.m2\repository
?),存下載好的 jar 包,優先查找,避免重復下載。 - 遠程倉庫(私服)(綠色):公司 / 團隊自己搭的私有倉庫(可選),用于存內部框架、公共組件,團隊協作時用。
- 中央倉庫(粉色):Maven 官方維護的 “全球倉庫”,包含幾乎所有開源 jar 包,本地和私服沒有時,會從這下載。
三、工作流程(依賴查找邏輯)
當你在項目里通過?pom.xml
?引入一個依賴(比如?Spring
?),Maven 會按以下順序找 jar 包:
- 先看本地倉庫有沒有 → 有就直接用。
- 沒有的話,看公司有沒有遠程倉庫(私服)?→ 有就從私服下載到本地。
- 還沒有,就去中央倉庫下載 → 下完存本地,下次直接用。
四、為什么用 Maven?
- 省心:不用手動管理 jar 包,一行配置自動下載。
- 規范:統一項目結構、構建流程,團隊協作不 “打架”。
- 高效:一次下載,本地倉庫復用,多人開發共享依賴。
簡單說,Maven 是 Java 項目的 “管家”,用倉庫體系幫你自動管依賴、管構建,讓開發更專注寫代碼~
這張圖聚焦?Maven 生命周期,是理解 Maven 構建流程的核心。以下用 “蓋房子” 類比,拆解 Maven 核心邏輯:
一、核心概念:Maven 生命周期是 “構建流程的階段組合”
Maven 把項目構建(從代碼到可運行產物)拆成?3 套 “流程模板”(生命周期),每套模板包含多個階段(Phase),類似 “蓋房子分奠基→砌墻→裝修” 的流程。
二、3 套生命周期詳解(類比 “蓋房子流程”)
1.?clean 生命周期:“拆房子”(清理舊產物)
- 作用:刪除上一次構建的殘留文件(如?
target
?目錄),為新構建 “騰地方”。 - 階段:
pre-clean
:準備清理(極少手動用,Maven 自動觸發前置邏輯)。clean
:執行清理(刪除?target
?目錄)。post-clean
:清理后收尾(同理,極少手動用)。
類比:拆房子前先斷水斷電(pre-clean
)→ 拆房子(clean
)→ 清理建筑垃圾(post-clean
)。
2.?default 生命周期:“蓋房子核心流程”(編譯→測試→打包→部署)
- 作用:項目構建的核心流程,從源碼到可運行產物的完整步驟。
- 階段(重點,日常開發常用):
compile
:編譯代碼(把?.java
?轉成?.class
)。test
:運行單元測試(確保代碼邏輯正確)。package
:打包(生成 Jar/War 包,類似 “把房子裝修好封裝”)。install
:安裝到本地倉庫(把 Jar 包存到本地 Maven 倉庫,供其他項目引用)。
類比:
compile
?→ 打地基、砌墻(把設計圖轉成實體結構)。
test
?→ 驗收(檢查墻砌得直不直、水電通不通)。
package
?→ 裝修(給房子做最終包裝,具備交付條件)。
install
?→ 把房子登記到 “本地房產庫”(方便其他項目 / 人引用)。
3.?site 生命周期:“做房產證 / 說明書”(生成項目報告)
- 作用:生成項目文檔、報告(如 API 文檔、測試覆蓋率報告)。
- 階段:
pre-site
:準備生成報告(自動觸發前置邏輯)。site
:生成報告(如 HTML 格式的項目文檔)。post-site
:報告生成后處理(極少手動用)。
類比:給房子辦房產證、拍宣傳照(生成文檔 / 報告),方便別人了解項目。
三、關鍵規則:“執行后邊階段,自動觸發前邊所有階段”
同一生命周期內,執行某個階段時,Maven 會自動執行它之前的所有階段。
比如:
- 執行?
mvn package
(屬于 default 生命周期),Maven 會自動先執行?compile
?→?test
?→ 再執行?package
。 - 執行?
mvn install
,會自動執行?compile
?→?test
?→?package
?→?install
。
四、總結:Maven 生命周期是 “標準化的構建流程”
Maven 通過?3 套生命周期,把項目構建拆成清晰的階段,讓構建流程標準化、自動化:
clean
?負責 “清理舊產物”,default
?負責 “核心構建流程”(從編譯到部署),site
?負責 “生成項目文檔”。
執行命令時,Maven 會自動串聯同一生命周期的階段,讓開發者只需關注 “要達到的目標”(如?package
?或?install
),無需手動執行每個步驟。這就是 Maven 提升效率的核心邏輯~
?