Maven應用相關說明
做用
項目管理工具,對項目進行構建依賴管理服務器
Maven POM
POM (Project Object Model) 項目對象模型,Maven工程的基本單元框架
POM指定配置
- 項目描述
- 項目依賴
- 項目插件
- 項目構建的Profile
Maven構建的生命週期
- 驗證 validate:驗證項目的配置是否正確
- 編輯 complier:編譯源代碼
- 測試 test:使用適當的測試框架測試
- 包裝 package:對已編譯的文件打包
- 檢查 verify:對集成測試的結果檢查,以保證質量達標
- 安裝 install:安裝打包的項目到本地倉庫,以供其它項目使用
- 部署 deploy:拷貝最終的工程包到遠程倉庫中,以共享給其它開發人員使用
Maven倉庫
- 本地倉庫 本地機器.m2指向的文件目錄
- 遠程倉庫 遠程服務器的maven服務器,包maven倉庫和其它私服
Maven 依賴
scope maven的scope決定依賴的包是否加入本工程的classpath下
依賴範圍scope |
編譯classpath |
測試classpath |
運行classpath |
傳遞性 |
complie |
Y |
Y |
Y |
Y |
test |
- |
Y |
- |
- |
provider |
Y |
Y |
- |
- |
runtime |
- |
Y |
Y |
Y |
system |
Y |
Y |
- |
Y |
詳解
complie : 默認,強依賴,打包的時候會包含
test : 僅僅參與測試相關的編譯、運行
provider : 打包的時候不會包含,使用時須要使用方提供相關設施(或者說是依賴),能夠理解爲編譯後打包的時候excluded出去了
runtime : 無需參與編譯,終端項目中與complie的區別:跳過編譯,常與optional搭配使用
system:與provider相似,區別在與設施提供方不是maven倉庫,而是從本地文件系統中獲取。必定要配合systemPath屬性使用(能夠理解爲從外部拷貝依賴到項目中)
optional 與 exclutions
相同點:都是排除jar是依賴
不一樣點:
- optional:該依賴只能在當前項目中使用,不能傳遞到引用該項目的父項目,如父項目須要使用則須要主動依賴
- exclutions:主動排除子項目傳遞的依賴
重複依賴的兩大原則
最短路徑原則
好比以下兩個版本的依賴關係:
V1版本:A -> B -> C -> D
V2版本:A ->M -> N -> G -> D
這個時候出現了兩個版本的D,依據最短路徑原則,V1版本依賴D的路徑長度爲3,V2版本依賴D的路徑長度爲4,因此選擇V1版本的D依賴maven
聲明優先原則
好比以下兩個版本的依賴關係:
V1版本:A -> B -> C
V2版本:A -> D -> C
這個時候兩個版本的最短路徑是同樣長,最短路徑原則就會失效,這個時候maven的解決方案是在POM中的優先聲明原則,誰先聲明就優先使用誰的版本ide