3 依賴傳遞與依賴沖突調(diào)節(jié)

1 傳遞性依賴

1.1 傳遞性依賴機制

  • Maven自動遞歸解析所有依賴,然后將依賴下載,作為項目的依賴

1.2 傳遞性依賴規(guī)則

  • 第一列為一級依賴
  • 第一行為二級依賴
compile test provided runtime
compile compile runtime
test test test
provided provided provided provided
runtime runtime runtime

例1:
項目依賴A(scope為compile),A依賴于B(scope為test)
此時項目對B的依賴范圍為空
因為B是給A測試使用,項目依賴A是compile,項目無需依賴B

例2:
項目依賴junit(單元測試,scope為test),junit依賴hamcrest-core(scope為默認(rèn)compile)
項目對hamcrest-core的依賴范圍為test

2 依賴沖突調(diào)節(jié)

2.1 依賴沖突產(chǎn)生原因

maven自動解析所有層級依賴,自動下載所有依賴,會導(dǎo)致依賴沖突問題

2.2 就近原則解決沖突

project -> pagehelper -> spring-core -> log4j-2.0
project -> spring-mybatis -> log4j-1.0

此時Maven遵循就近原則使用log4j-1.0

2.3 第一聲明原則解決沖突

project -> pagehelper -> log4j-2.0
project -> spring-mybatis -> log4j-1.0

此時Maven遵循第一聲明原則,log4j-2.0在log4j-1.0前聲明,使用log4j-2.0

3 XXX not found

3.1 問題產(chǎn)生

project -> pagehelper -> spring-core -> log4j-2.0
project -> spring-mybatis -> log4j-1.0
  • 此時就近原則生效,項目依賴log4j-1.0
  • pagehelper依賴spring-core,spring-core依賴log4j-2.0
  • 項目使用spring-core的A方法,A方法依賴log4j-2.0中的類或方法,就會拋出xxx not found問題

3.2 解決

  • 遵循最新版本原則
    當(dāng)項目依賴某jar包的多個版本時,優(yōu)先使用最新版本,將低版本依賴排除
為了舉例說明,實際依賴可能并非如此
project -> pagehelper -> spring-core -> log4j-2.0
project -> spring-mybatis -> log4j-1.0
  • 此時就近原則生效,項目依賴log4j-2.0,需將log4j-2.0依賴排除
  • 查看項目依賴樹

命令行

mvn dependency:tree
image.png

Maven Helper插件


image.png

image.png
  • 將pagehelper中mybatis排除依賴
<!-- pageHelper 中mybatis依賴與 下面沖突 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 整合mybatis配置 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>${mybatis.version}</version>
</dependency>

  • 再次查看項目依賴樹,項目依賴如下(只剩下log4j-2.0)
project -> pagehelper -> spring-core -> log4j-2.0
project -> spring-mybatis
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,205評論 0 3
  • 1、什么是坐標(biāo)? ①、數(shù)學(xué)中的坐標(biāo) 在平面上,使用 X 、Y 兩個向量可以唯一的定位平面中的任何一個點 在空間中,...
    goldfather閱讀 887評論 0 0
  • 坐標(biāo) 坐標(biāo)(Coordinate)是用來標(biāo)識或者定位資源的,上節(jié)中我們?yōu)樽砸训腍elloWorld工程定義了坐標(biāo),...
    巴福Buff閱讀 774評論 0 0
  • maven項目中需要使用到其它依賴時,則需要在pom.xml中配置<dependency>元素也就是依賴聲明,這樣...
    zlcook閱讀 2,046評論 1 3
  • maven是一款優(yōu)秀的服務(wù)構(gòu)建工具,基于約定優(yōu)于配置原則,提供標(biāo)準(zhǔn)的服務(wù)構(gòu)建流程。maven的優(yōu)點不僅限于服務(wù)構(gòu)建...
    zhipingChen閱讀 4,076評論 0 4

友情鏈接更多精彩內(nèi)容