What is Maven
Maven 是一個構建工具,處理了你的 .java 文件編譯成 .class 再打包成 .jar文件,管理了你的(classPath)[https://en.wikipedia.org/wiki/Classpath_(Java)]和其他與構建相關的任務。Maven 它完全獨立通過合并其他常見任務如(下載和安裝必要的庫),您可以不需要其他的任何工具和腳本。
Maven 設計理念圍繞"構建可移植性",這樣一來,您不會遇到在同一臺計算機上使用相同的構建腳本具有相同代碼的問題,而在另一臺計算機上卻沒有。
Maven 的三個優(yōu)點:
- Maven 會下載你使用的庫,并且自動下載這些庫的依賴,這樣處理使得很多苦變得容易。并且讓你避免了依賴地獄
- 它使用約定優(yōu)于配置,因此默認情況下你不需要定義你想要做的任務
- Maven還具有許多不錯的插件,您可以安裝這些插件來處理許多例行任務,從使用JAXB從XSD架構生成Java類到使用Cobertura測量測試覆蓋率。只需將它們添加到pom.xml中,它們就會與您想要執(zhí)行的所有其他操作集成。
Maven依賴處理原則
Maven 依賴處理機制原則:最短路徑原則和優(yōu)先聲明原則。
最短路徑原則
假設有2個依賴:
A -> B -> C(2.0)
N -> C(1.0)
這時候出現2個沖突的依賴C(1.0)和C(2.0),這時maven會采用最短路徑原則,選擇C(1.0)
優(yōu)先聲明原則
A -> B -> C(2.0)
N -> M -> C(1.0)
路徑深度相同,那么選用的依賴C的版本取決于最先聲明的那個包。
如何處理Maven包沖突
常見的exclude字段排除或者主動鎖版本
// A的聲明 > N
A -> B -> C(2.0)
N -> M -> C(1.0)
假設你想要使用C(1.0),你可以手動指定exclude字段把C(2.0)排除出去。
也可以直接聲明一個C的depedency,version鎖定在1.0。
Maven字段
reference: stackoverflow what is maven , maven的依賴原則