Maven如何解決jar包衝突
什麼時jar包衝突
當同一個項目中引入多個相同的jar包,只是它們的版本號不同,即version,而你想使用高版本中的類或者方法,此時低版本的jar包中沒有這個方法或者沒有這個類,就會拋出
- java.lang.NoSuchMethodError
- java.lang.ClassNotFoundException
解決方案
最短路徑原則
假如依賴關係是這樣的:
① :A----> B------>C---->D
② :E----->F------->D
此時maven選擇jar包時會優先選擇那個路徑短的,即選擇第二個中的D
聲明優先原則
當路徑相同的情況下,會優先使用最先聲明的jar包。
依賴排除
找到衝突的jar包,在IDEA中有相關的插件可以幫我們,然後給衝突的依賴加使用標籤即可排除,而且插件工具也可以自動添加標籤幫我們自動解決,只要點擊即可。
版本鎖定原則
正常項目都是多模塊的項目,如A和B共同依賴X這個依賴的話,那麼我們可以將X單獨抽取出來,同時設置其版本號,這樣X依賴在升級的時候,不需要分別對A和B模塊中的依賴X進行升級,避免太多地方(C、D….)引用X依賴的時候忘記升級造成jar包衝突,這也是實際項目開發中比較常見的方法。