MAVEN解決版本依賴沖突

文章目錄

  • 一、依賴沖突概念
    • 1、什么是依賴沖突
    • 2、依賴沖突的原因
    • 3、如何解決依賴沖突
  • 二、查看依賴沖突-maven-helper
    • 1、安裝
    • 2、helper使用
      • 1、conflicts的閱讀順序(從下向上看)
      • 2、dependencies as List的閱讀順序(從下向上看)
      • 3、dependencies as Tree閱讀(從上向下看)
  • 三、解決依賴沖突
    • 1、排除指定版本(常用,推薦)
      • 1、查看沖突
      • 2、排除不需要的版本
      • 3、查看pom依賴,刷新pom后
      • 4、再次點擊【conflicts】,或者點擊【Refresh UI】進行刷新
    • 2、使用第一聲明者優先原則
    • 3、鎖定版本(推薦)
    • 總結

一、依賴沖突概念

1、什么是依賴沖突

依賴沖突是指項目依賴的某一個jar包,有多個不同的版本,因而造成類包版本沖突,從而導致調試過程中出現類似類找不到,NoSuchMethodError等錯誤。
在這里插入圖片描述

2、依賴沖突的原因

依賴沖突很經常是類包之間的間接依賴引起的。每個顯式聲明的類包都會依賴于一些其它的隱式類包,這些隱式的類包會被maven間接引入進來,從而造成類包沖突

3、如何解決依賴沖突

首先查看產生依賴沖突的類jar,其次找出我們不想要的依賴類jar,手工將其排除在外就可以了。

二、查看依賴沖突-maven-helper

安裝了Maven Helper插件,只要打開pom文件,就可以打開該pom文件的Dependency Analyzer視圖(在文件打開之后,文件下面會多出這樣一個tab),進入Dependency Analyzer視圖之后有三個查看選項,分別是Conflicts(沖突)、All Dependencies as List(列表形式查看所有依賴)、All Dependencies as Tree(樹結構查看所有依賴)。并且這個頁面還支持搜索。很方便!

1、安裝

在這里插入圖片描述

2、helper使用

1、當Maven Helper 插件安裝成功后,打開項目中的pom文件,下面就會多出一個圖
在這里插入圖片描述
2、打開pom文件,并可以切換tab,簡單使用
在這里插入圖片描述

  • Conflicts(查看沖突)
  • All Dependencies as List(列表形式查看所有依賴)
  • All Dependencies as Tree(樹形式查看所有依賴)
    當前界面上還提供搜索功能 方便使用

1、conflicts的閱讀順序(從下向上看)

從圖中可以看出有哪些jar存在沖突,存在沖突的情況下最終采用了哪個依賴的版本。標紅的就是沖突版本,白色的是當前的解析版本。這個選項,需要從下向上看;
并且這里是:A依賴于B,B依賴于C,C依賴D。
如下圖:沖突的jar包就是jackson,swagger通過web、json最終依賴到jackson。
在這里插入圖片描述

2、dependencies as List的閱讀順序(從下向上看)

dependencies as List 欄目和conflicts一樣,都是從下向上看,依次依賴。
在這里插入圖片描述

3、dependencies as Tree閱讀(從上向下看)

datascope依賴securlty,再依賴system,再依賴core,再依賴到jackson
在這里插入圖片描述

三、解決依賴沖突

1、排除指定版本(常用,推薦)

1、查看沖突

點擊【Conflicts】,從圖中可以看到那些jar包沖突。存在沖突的情況下最終選擇了那么版本。標紅的就是沖突版本,白色的是當前的解析版本。
如果有多個依賴的版本發生了沖突,那么只要把其中一個依賴給排除掉,只剩下一個依賴,那么自然就可以解決沖突的問題。我們只需要使用exclusion關鍵字對相關依賴進行排除就行

  • 這里可以看到 spirng-beans-4.2.4.release和spring-beans-5.0.12沖突,這里舍棄spirng-beans-4.2.4.release這個版本,保留spring-beans-5.0.12 這個版本。使用 exclusion 排除定位到的沖突包。
    在這里插入圖片描述

2、排除不需要的版本

通過上邊的圖,我們一刻看到最終選擇了【4.2.4】版本,如果我要使用【5.0.12】版本。那么只需要吧【4.2.4】給排除掉。點擊【Exclude】進行排除即可。
在這里插入圖片描述

3、查看pom依賴,刷新pom后

在這里插入圖片描述

4、再次點擊【conflicts】,或者點擊【Refresh UI】進行刷新

在這里插入圖片描述

2、使用第一聲明者優先原則

誰先定義的就用誰的傳遞依賴,即在pom.xml文件自上而下,先聲明的jar坐標,就先引用該jar的傳遞依賴。因此我們如果要使用5.2.0版本的spring core包,我們可以改成如下聲明

  <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.2.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.7.RELEASE</version></dependency></dependencies>

3、鎖定版本(推薦)

使用dependencyManagement 進行版本鎖定,dependencyManagement可以統一管理項目的版本號。這樣的話,導入依賴的時候就會直接使用我們鎖定的依賴版本。確保應用的各個項目的依賴和版本一致。

(1)在父項目的pom中進行約定

<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.0.RELEASE</version></dependency></dependencies></dependencyManagement>

這樣在后續的子工程中,就不用寫版本號了,直接就沿用副項目的版本號

(2):在同一個項目pom中,既約定版本號,又導入依賴

<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.0.RELEASE</version></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.2.0.RELEASE</version></dependency></dependencies>

總結

綜上就是maven如何排查依賴沖突以及解決方法,

  • 對于排查依賴個人比較推薦使用maven helper插件,
  • 至于解決依賴沖突個人推薦使用版本鎖定的方法,此外dependencyManagement只是聲明依賴,并不自動實現引入,因此子項目需要顯示的聲明需要用的依賴

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72046.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72046.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72046.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

79.ScottPlot的MVVM實現 C#例子 WPF例子

如何通過數據綁定在 WPF 中實現動態圖像顯示 在 WPF 應用程序中&#xff0c;通過數據綁定實現動態圖像顯示是一種高效且優雅的方式。以下是一個簡單的教程&#xff0c;展示如何使用 ScottPlot.WPF 庫和 MVVM 模式來實現這一功能。 第一步&#xff1a;安裝必要的 NuGet 包 首…

簡單工廠 、工廠方法模式和抽象工廠模式

簡單工廠 、工廠方法模式和抽象工廠模式 1.模式性質與定位 簡單工廠:并非正式的設計模式(屬編程習慣),通過單一工廠類根據參數判斷創建不同產品,本質是將對象創建邏輯集中管理。 工廠方法:是標準的創建型設計模式,定義抽象創建接口,由子類決定實例化哪個具體產品類,…

熱圖回歸(Heatmap Regression)

熱圖回歸(Heatmap Regression)是一種常用于關鍵點估計任務的方法,特別是在人體姿態估計中。它的基本思想是通過生成熱圖來表示某個關鍵點在圖像中出現的概率或強度。以下是熱圖回歸的主要特點和工作原理: 主要特點 熱圖表示: 每個關鍵點對應一個熱圖,熱圖中的每個像素值…

Word 小黑第15套

對應大貓16 修改樣式集 導航 -查找 第一章標題不顯示 再選中文字 點擊標題一 修改標題格式 格式 -段落 -換行和分頁 勾選與下段同頁 添加腳注 &#xff08;腳注默認位于底部 &#xff09;在腳注插入文檔屬性&#xff1a; -插入 -文檔部件 -域 類別選擇文檔信息&#xff0c;域…

Java 大視界 -- Java 大數據在智能安防視頻摘要與檢索技術中的應用(128)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

Python里matplotlib不顯示中文的問題

在很長一段時間里用Python繪圖&#xff0c;matplotlib都不能很好的顯示中文&#xff0c;起初是認為我的pycharm里的設置問題&#xff0c;但是發現同樣的問題在spyder里也同樣的出現。 一共有兩種解決方案&#xff0c;我強烈推薦第一種&#xff0c;因為更為方便&#xff0c;繪圖…

JavaWeb-servlet6中request和response的使用

HttpServletRequest HttpServletRequest 繼承自 ServletRequest。客戶端瀏覽器發出的請求被封裝成為一個 HttpServletRequest對象。 對象包含了客戶端請求信息包括請求的地址&#xff0c;請求的參數&#xff0c;提交的數據&#xff0c;上傳的文件客戶端的ip甚至客戶端操作系統…

機器學習(吳恩達)

一, 機器學習 機器學習定義: 計算機能夠在沒有明確的編程情況下學習 特征: 特征是描述樣本的屬性或變量&#xff0c;是模型用來學習和預測的基礎。如: 房屋面積, 地理位置 標簽: 監督學習中需要預測的目標變量&#xff0c;是模型的輸出目標。如: 房屋價格 樣本: 如: {面積100㎡…

CNN的激活函數

我們來對比 Sigmoid、Softmax 和 ReLU 這三種激活函數的相同點和不同點&#xff0c;并分別說明它們相較于其他兩種激活函數的優點。 相同點 都是非線性激活函數&#xff1a; 這三種激活函數都能為神經網絡引入非線性特性&#xff0c;使網絡能夠學習復雜的模式。 廣泛應用于深度…

Oracle數據恢復:閃回查詢

Oracle數據恢復:閃回查詢 SQL語法閃回查詢:AS OF閃回版本查詢:VERSIONS BETWEEN數據恢復示例閃回查詢最佳實踐應用場景使用限制注意事項最佳實踐在誤刪除業務數據時,Oracle數據庫通常支持以下幾種數據恢復途徑。 閃回查詢(Flashback Query):閃回查詢通過查詢系統的UNDO數…

【MySQL篇】MySQL內置函數

目錄 1&#xff0c;日期函數 2&#xff0c;字符串函數 3&#xff0c;數學函數 4&#xff0c;其他函數 實戰OJ 1&#xff0c;日期函數 日期類型在之前文章【數據類型】中有描述 傳送門&#xff1a;【MySQL篇】數據類型_mysql 數據類型-CSDN博客 函數名稱描述current_dat…

蘋果iOS 18.4將強制升級HomeKit架構,舊版設備或無法使用

在科技飛速發展的當下,智能家居領域也在不斷革新。而蘋果公司作為科技行業的巨頭,其每一次動作都備受關注。近日,有消息稱蘋果計劃在iOS 18.4版本中停止對舊版HomeKit架構的支持,這一舉措意味著用戶將被迫升級,也可能對眾多使用Apple Home應用的智能家居設備用戶產生深遠影…

故障診斷——neo4j入門

文章目錄 neo4jQuickStartDemo neo4j QuickStart 詳情可見博客&#xff1a;https://www.cnblogs.com/nhdlb/p/18703804&#xff0c;使用docker拉取最近的一個版本進行創建 docker run -it -d -p 7474:7474 -p 7687:7687 \ -v /disk5/neo4j_docker/data:/data \ -v /disk5/ne…

《蒼穹外賣》SpringBoot后端開發項目核心知識點與常見問題整理(DAY1 to DAY3)

目錄 一、在本地部署并啟動Nginx服務1. 解壓Nginx壓縮包2. 啟動Nginx服務3. 驗證Nginx是否啟動成功&#xff1a; 二、導入接口文檔1. 黑馬程序員提供的YApi平臺2. YApi Pro平臺3. 推薦工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api與ApiModel1.2 ApiModelProperty與Ap…

大模型安全新范式:DeepSeek一體機內容安全衛士發布

2月以來&#xff0c;DeepSeek一體機幾乎成為了政企市場AI消費的最強熱點。 通過一體機的方式能夠縮短大模型部署周期&#xff0c;深度結合業務場景&#xff0c;降低中小企業對于大模型的使用門檻。據不完全統計&#xff0c;已約有超過60家企業基于DeepSeek推出一體機產品。 但…

OpenHarmony-SELinux配置

前言&#xff1a; OpenHarmony 上某個進程向samgr注冊SA服務&#xff0c;其他進程在與該進程進行IPC通信之前&#xff0c;需要獲取該SA服務&#xff0c;SA提供方需要為該SA配置SELinux標簽&#xff0c;否則該SA會被SELinux配置為u:object_r:default_service:s0標簽&#xff0c…

SQL開發中改善查詢性能的N種寫法

文章目錄 1. 使用 SELECT *2. 在 WHERE 子句中使用函數或計算3. 使用隱式類型轉換4. 不使用索引的列進行連接&#xff08;JOIN&#xff09;或過濾5. 使用 OR 代替 IN6. 在子查詢中使用 SELECT *7. 忽略索引統計信息8. 嵌套子查詢過多9. 過度使用 DISTINCT10. 使用不當的 JOIN 類…

第十八:go 并發 goroutine

channel 可以讓多個goroutine 之間實現通信 Add方法調用時機&#xff1a;必須在goroutine 啟動之前調用Add方法來增加計數器的值。 如果在goroutine已經啟動之后再調用Add&#xff0c;可能會導致Wait方法提前返回&#xff0c;因為計數器沒有正確反映正在運行的goroutine的數量…

數字IC后端項目典型問題(2025.03.10數字后端項目問題記錄)

小編發現今天廣大學員發過來的問題都比較好&#xff0c;立即一頓輸出分享給大家&#xff08;每天都有好多種類的數字后端問題&#xff09;。后續可能會經常通過這種方式來做分享。其實很多問題都是實際后端項目中經常遇到的典型問題。希望通過這種方式的分享能夠幫助到更多需要…

課程《Deep Learning Specialization》

在coursera上&#xff0c;Deep Learning Specialization 課程內容如下圖所示&#xff1a; Week2 assignment, Logistic Regression.