Maven依賴沖突的解決方式


Maven依賴沖突的解決方式

在這里插入圖片描述

對Maven概念還不了解的可以看看我的這篇文章: https://blog.csdn.net/pjh88/article/details/108520721

在講依賴沖突之前我們先來講講什么是依賴傳遞

在maven中依賴是可以傳遞的,比如我們有A,B,C三個項目,其中A依賴B,B依賴C,由遞推可知A依賴C

在這里插入圖片描述

舉例

比如我們在web項目中導入spring-webmvc的jar包,即我們的項目依賴了spring-webmvc,其實spring-webmvc還依賴其他jar包,比如sping-aop、spring-beans,所以我們的web項目也間接依賴了sping-aop、spring-beans

在這里插入圖片描述

什么是依賴沖突

這是由於依賴傳遞現象的存在

比如spring-webmvc 依賴 spirng-beans-4.2.4,而spring-aop 依賴 spring-beans-5.0.2,但是發現 spirng-beans-4.2.4 加入到了工程中,而我們希望 spring-beans-5.0.2 加入工程。這就造成了依賴沖突。

在這里插入圖片描述

在我們的開發中我們當然啦不允許這種情況的出現,我們要使用什么版本,他就必須使用什么版本

在這里插入圖片描述

解決方案

  1. 使用maven提供的依賴調解原則
    第一聲明者優先原則
    路徑近者優先原則
  2. 排除依賴
  3. 鎖定版本

1. 使用maven提供的依賴調解原則

第一聲明者優先原則

在 pom 文件中定義依賴,以先聲明的依賴為准。其實就是根據坐標導入的順序來確定最終使用哪個傳遞過來的依賴。

在這里插入圖片描述

通過上圖可以看到,spring-aop和spring-webmvc都傳遞過來了spring-beans,但是因為spring-aop在前面,所以最終使用的spring-beans是由spring-aop傳遞過來的,而spring-webmvc傳遞過來的spring-beans則被忽略了

路徑近者優先原則

在 pom 文件定義依賴,以路徑近者為准。
還是上述情況,spring-aop 和 spring-webmvc 都會傳遞過來 spirng-beans,那如果直接把 spring-beans 的依賴直接寫到 pom 文件中,那么項目就不會再使用其他依賴傳遞來的 spring-beans,因為自己直接在 pom 中定義 spring-beans要比其他依賴傳遞過來的路徑要近

排除依賴

可以使用exclusions標簽將傳遞過來的依賴排除出去

沒有使用的時候
在這里插入圖片描述使用之后

在這里插入圖片描述

通過上圖可以看到,spring-webmvc傳遞過來的4.2.4版本的spring-beans已經被排除出去了,項目中使用的為spring-aop傳遞過來的5.0.2版本的spring-beans。

版本鎖定

使用dependencyManagement標簽鎖定依賴的版本

注意dependencyManagement中指定的僅僅是對應jar包的版本,並不會把指定的jar導入到項目中,要導入對應的jar包還是要使用dependencies標簽
在這里插入圖片描述
在使用dependence標簽的時候不需要再指定版本號了

在這里插入圖片描述
在這里插入圖片描述

以上就是Maven依賴沖突的解決方式,如有幫助還請點贊關注支持,如有疑問評論私信都可,看到后可幫助解答本博客主要側重於數據結構於算法和java開發,操作系統,計算機網絡,覺得我的文章有幫助的小伙伴可以關注我,有疑問可評論私信,相逢即是緣,大家高處見

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM