maven管理庫依賴,有個好處就是連同庫的依賴的所有jar文件一塊兒下載,免去手工添加的麻煩,但同時也帶來了同一個jar會被下載了不一樣版本的問題,好在pom的配置裏面容許用<exclusion>來排除一些不須要同時下載的依賴jar 。maven
一、mvn的傳遞依賴特性:mvn編譯打包除了會引入直接申明的依賴,還會引入間接申明的依賴spa
二、mvn的依賴仲裁規則:開發
1). 按照項目總控POM的DependencyManager版本聲明進行仲裁。io
2). 如無仲裁聲明,則按照依賴最短路徑肯定版本。編譯
3). 若相同路徑,有嚴格區間限定的版本優先。class
4). 若相同路徑,無版本區間,則按照先入爲主原則。打包
三、依賴的scope會影響依賴的影響範圍。配置
一、根據報錯的class名或方法名定位到可能致使衝突的jar包,jar包衝突引入有幾種狀況:下載
1). 引入了這個jar包的多個版本,而mvn仲裁的時候取了錯誤的版本,這個版本自己就缺乏正確的class或方法。方法
2). 引入了不一樣座標可是具備同名class的多個jar,mvn加載class的順序差別會致使加載到錯誤的class。
二、經過mvn dependency:tree > tree.txt 導出所有的依賴。 可使用 -Dverbose 、-Dincludes或者-Dexcludes參
數來精肯定位致使衝突的jar包。
三、找到須要排除的依賴jar包,經過mvn仲裁優先的方法定義正確的jar包,或者經過exclusion的方式排除錯誤的jar包。
4.舒適提示:另外在項目開發中jar儘可能按需引入,系統管理起來,別什麼都無論直接加包進來,這樣也能夠在必定程度上減小jar
包衝突的風險。