Maven jar包沖突的解決方案
現(xiàn)象
創(chuàng)建一個maven工程,引入spring-context包。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.8.RELEASE</version> </dependency>
此時看左側的lib,我們發(fā)現(xiàn)引入了一個坐標,多出了很多的jar包,這個現(xiàn)象叫做依賴傳遞,就是說,當前坐標所依賴的jar包也會一同引入進來,這里的版本都是5.0.8的。
接下來,我們再引入一個springmvc。我們換一個版本,我們引入4.2.4版本
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.4.RELEASE</version> </dependency>
我們通過idea給的maven分析圖可以看出,mvc和context都依賴與sprng-core一個,依賴的是5.0.8版本,一個依賴的是4.2.4版本。
那么真正加載的是哪個版本呢。是5.0.8版本。
此時就是存在了jar包的沖突問題,那么我們解決這個問題,有三種方式。
聲明優(yōu)先原則
此時我們的pom文件中是先聲明的5.0.8版本,后聲明的4.2.4版本,我們將其調換順序。
此時我們發(fā)現(xiàn)他們共同依賴的jar包,都變成了4.2.4版本,這就是聲明優(yōu)先原則。
就近優(yōu)先原則
比如,我們不想調換順序,我們就是想使用4.2.4版本的spring-core。我們可以單獨引入進來
此時再看,我們發(fā)現(xiàn)依賴的spring-core已經變成了4.2.4版本了。
這個就是就近優(yōu)先原則,就近優(yōu)先是直接依賴,直接依賴的優(yōu)先級大于傳遞依賴的優(yōu)先級。
排除依賴
這種方式我們可以直接排除spring-context中的spring-core的傳遞依賴。
再看依賴,此時已經改為4.2.4.
使用exclusions標簽的時候,其內部不用寫版本號,這是唯一不用寫版本號的一種情況。因為他默認就去找當前依賴的版本了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
使用MyBatis的動態(tài)SQL注解實現(xiàn)實體的CRUD操作代碼
在使用MyBatis進行數(shù)據(jù)庫操作時,動態(tài)SQL注解提供了一種優(yōu)雅的方式來編寫動態(tài)SQL語句,MyBatis?3.x?版本提供了下四個CRUD的高級注解,這些注解可以幫助開發(fā)者在Mapper接口中動態(tài)地構建SQL語句,本文給大家介紹了使用MyBatis的動態(tài)SQL注解實現(xiàn)實體的CRUD操作2024-06-06基于mybatis?plus實現(xiàn)數(shù)據(jù)源動態(tài)添加、刪除、切換,自定義數(shù)據(jù)源的示例代碼
這篇文章主要介紹了基于mybatis?plus實現(xiàn)數(shù)據(jù)源動態(tài)添加、刪除、切換,自定義數(shù)據(jù)源,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03java使用compareTo實現(xiàn)一個類的對象之間比較大小操作
這篇文章主要介紹了java使用compareTo實現(xiàn)一個類的對象之間比較大小操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09