Maven依賴衝突的解決方式

Maven依賴衝突的解決方式

在這裏插入圖片描述

對Maven概念還不瞭解的能夠看看個人這篇文章: https://blog.csdn.net/pjh88/article/details/108520721java

在講依賴衝突以前咱們先來說講什麼是依賴傳遞

在maven中依賴是能夠傳遞的,好比咱們有A,B,C三個項目,其中A依賴B,B依賴C,由遞推可知A依賴Cweb

在這裏插入圖片描述

舉例

好比咱們在web項目中導入spring-webmvc的jar包,即咱們的項目依賴了spring-webmvc,其實spring-webmvc還依賴其餘jar包,好比sping-aop、spring-beans,因此咱們的web項目也間接依賴了sping-aop、spring-beans算法

在這裏插入圖片描述

什麼是依賴衝突

這是因爲依賴傳遞現象的存在spring

好比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提供的依賴調解原則

第一聲明者優先原則mvc

在 pom 文件中定義依賴,以先聲明的依賴爲準。其實就是根據座標導入的順序來肯定最終使用哪一個傳遞過來的依賴。maven

在這裏插入圖片描述

經過上圖能夠看到,spring-aop和spring-webmvc都傳遞過來了spring-beans,可是由於spring-aop在前面,因此最終使用的spring-beans是由spring-aop傳遞過來的,而spring-webmvc傳遞過來的spring-beans則被忽略了操作系統

路徑近者優先原則.net

在 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開發,操做系統,計算機網絡,以爲個人文章有幫助的小夥伴能夠關注我,有疑問可評論私信,相逢便是緣,你們高處見

在這裏插入圖片描述

相關文章
相關標籤/搜索