1. 程式人生 > >如何快速的解決Maven依賴沖突

如何快速的解決Maven依賴沖突

出了 傳遞 如果 ive AS maven坐標 如何 arch 說明

為什麽會出現依賴沖突

首先要說明Maven的依賴管理,具體的可以參考這邊 Maven學習——依賴管理 這篇文章,maven在依賴沖管理中有一下幾個原則。

  1. 依賴是使用Maven坐標來定位的,而Maven坐標主要由GAV(groupId, artifactId, version)構成。如果兩個相同的依賴包,如果groupId, artifactId, version不同,那麽maven也認為這兩個是不同的。
  2. 依賴會傳遞,A依賴了B,B依賴了C,那麽A的依賴中就會出現B和C。
  3. Maven對同一個groupId, artifactId的沖突仲裁,不是以version越大越保留,而是依賴路徑越短越優先,然後進行保留。
  4. 依賴的scope會影響依賴的影響範圍。

當出現了依賴的時候如何快速定位沖突原因

但出現了沖突的時候,比如系統出現了NoSuchMethodError,LinkageError 很有可能是你系統中出現了依賴沖突。出現沖突以後,可以按以下的步驟執行

1.確定出了問題的jar包名稱。通常可以在eclipse中查找沖突的類有在哪些依賴包裏面出現了。並確定實際要使用的是那個包,沖突的包有哪些。

2.通過mvn dependency:tree > tree.txt 導出全部的依賴。

3.在導出的依賴文件中,查找問題相關的jar。確定這些jar是如何被依賴進來的,是直接依賴的還是通過傳遞依賴引入的。

4. 找到相互沖突的並需要排除的依賴的頂級依賴,並分析沖突的原因,沖突的原因可能是以下幾種:

  • 同一個jar包但groupId, artifactId不同,這種沖突只能通過設定依賴的<exclusions> 來進行排除
  • 需要的版本jar包依賴路徑較長,這種沖突可以把想要版本的依賴直接什麽在依賴中,這樣路徑就最短了優先級最高。

5.最後可以通過打包mvn install 來確認打出來的war包中是否有被排除的依賴。

------------------------------------------------------------------------------------------------------------------------

來源:http://www.daniel-journey.com/archives/1125

如何快速的解決Maven依賴沖突