Maven基礎知識

本人博客文章網址:https://www.peretang.com/basic-knowledge-of-maven/


Maven簡介

  Maven , 用於Java項目的構建 , 依賴管理 , 項目信息管理的項目管理工具.

  是Apache組織旗下的開源項目.

  Maven核心功能是一個具有跨平臺特性的構建工具 , 幫助我們自動化構建 , 並提供一個完整的優化的構建生命週期模型 , 和構建任務所需的基礎組件/插件.

  Maven還是一個依賴管理工具和項目信息管理工具 , 方便開發人員更好的管理依賴與避免項目信息混亂等問題.

  Maven還提供了一套標準的約定規則 , 減輕不同項目的差異性.


Maven特性

Maven標準約定規則

  Maven是一個約定優於配置的工具 , 只要遵守Maven的約定 , 那麼只需要少量的配置 ,Maven就能幫助你完成你所需的大部分工作


Maven構建

  Maven統一了項目構建時的階段 , 提供了一個標準化的構建階段模型:

  1. validate (驗證) : 驗證項目的所有必要信息的正確性

  2. initialize (初始化) : 初始化構建狀態 , 例如設置屬性或創建目錄

  3. generate-sources,process-sources (處理源文件) : 處理項目源文件

  4. generate-resources,process-resources (處理資源文件) : 對資源文件進行處理 , 並將其複製到目標目錄 , 等待打包

  5. compile,process-classes (主代碼編譯) : 編譯項目的主代碼至目標文件夾

  6. generate-test-sources,process-test-sources (處理測試源文件) : 對項目測試源文件進行處理

  7. generate-test-resources,process-test-resources (處理測試資源文件) : 對項目測試資源文件進行處理 , 並將其複製到目標目錄

  8. test-compile,process-test-classes (測試代碼編譯) : 編譯項目的測試源代碼至目標文件夾

  9. test (測試) : 使用項目定義的單元測試框架進行測試

  10. prepare-package,package (打包) : 將編譯後的主代碼打包成所需的格式"軟件包"

  11. pre-integration-test,integration-test,post-integration-test (集成測試) : 如需要 , 會將打包好的"軟件包"部署到可以運行集成測試的環境中進行集成測試

  12. verify (校驗) : 運行定義的檢查步驟以驗證"軟件包"是否有效 或 是否符合質量標準

  13. install (安裝) : 將"軟件包"安裝到本地倉庫[1]中 , 以作爲本地其他項目的依賴

  14. deploy (部署) : 將"軟件包"發佈到遠程倉庫[2]中 , 以供其他人使用與項目共享

Maven依賴管理與項目信息管理

  關於依賴管理方面 , 在目前這個年代 , 幾乎每個Java應用都會有第三方的開源庫依賴 , 若還是使用手工的方式管理會嚴重影響開發人員的效率 , 並會因爲依賴增多的問題的增加更加複雜 , 所幸Maven提供了優秀的解決方案 , 通過引入"GroupId","ArtifactId","Version","type"等元素爲Java的依賴問題提供了一個座標系統 , 從而幫助開發人員更好的管理項目.

  關於項目信息管理方面 , 當開發人員使用第三方開源庫時 , 總會有需要查看文檔 , 源代碼等需求 , 在使用Maven之前 , 開發人員總需要去各大搜索引擎去查找這些信息 , 但當引入Maven後 , 這些關於項目的信息 , 可以統一在POM文件[3]中聲明 , 方便其他人的查找 , 與項目信息的統一管理.

 

POM文件

  POM文件是Maven的一大核心內容 , 其全稱爲"Project Object Model"即項目對象模型.
  其用於定義項目的基本信息 , 指定項目如何構建 , 聲明項目依賴 ; POM文件提現了Maven的一大優點 , 即能讓項目對象模型最大程度與項目代碼等相獨立 , 即把兩者的關係進行了解耦.

 

Maven座標系統

  Maven構件 : 指的是平時項目打包完成後的的一些jar , war等文件.

  Maven座標爲各種構件引入了秩序 , 任何一個構件都必須明確定義自己的唯一座標 ; 而一組Maven座標就是通過以下一組元素定義的 :

  groupId : 定義當前Maven項目隸屬的實際項目

  artifactId : 定義實際項目中的一個Maven模塊/項目 , 推薦使用groupId作爲artifactId的前綴

  version : 定義Maven模塊/項目所處的版本 , Maven定義了一套完整的版本規範

  packaging : 定義Maven模塊/項目的打包方式

  classifier : 幫助定義一些與主構件對應的附屬構件

  Maven倉庫就是基於Maven的座標系統

 

Maven倉庫

  得益於Maven的座標機制 , 任何Maven項目使用的任何一個"構件"的方式都是相同的 ; 在此基礎上 , Maven可以在某個位置統一儲存所有Maven項目共享的"構件" , 這就是倉庫 ; 因爲倉庫 , 所以Maven項目不再需要各自儲存依賴的"構件" , 轉而只需聲明這些依賴的座標 , 在需要的時候 , Maven會自動根據座標找到倉庫中的"構件" , 並使用它們.

  倉庫的分類有兩種 , 本地倉庫與遠程倉庫 ; 當Maven根據座標尋找"構件"的時候 , Maven會先查看本地倉庫 , 如果本地倉庫存在此構件 , 則直接使用 ; 如果本地倉庫不存在此"構件" , 或需要查看是否有更新的版本 , Maven就會去遠程倉庫查找 , 當發現所需的"構件"後 , 就會下載到本地倉庫後再使用 ; 如果最終本地倉庫與遠程倉庫都無法找到所需要的"構件"時 , Maven就會報錯.

 


參考

  Apache Maven

  Maven實戰

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章