這里有一個案例是項目里依賴了b組件,b組件依賴了a組件1.0.2版本,而用戶也直接在pom依賴了a組件並聲明的1.0.0版本,結果在仲裁時選擇了1.0.0版本的a組件:
+- com.xxx:a:jar:1.0.0:compile
|
+- ...
| +- ...
|
+- com.xxx:b:jar:1.0.0:compile
| |
| +- (com.xxx:a:jar:1.0.2:compile - omitted for duplicate)
對於依賴某個組件的多個版本,maven的仲裁過程,並不是簡單的使用高版本,而是根據從根節點到各個組件節點之間的路徑深度,路徑短的組件優先,如果路徑深度相同,則是先發現的那個。類似一棵樹的廣度遍歷。