欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

maven依賴版本沒有按照最短路徑原則生效的解決方案

 更新時(shí)間:2021年01月29日 14:23:49   作者:干貨滿滿張哈希  
這篇文章主要介紹了maven依賴版本沒有生效的解決方案,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下

女朋友他們項(xiàng)目用了 spring-boot,以 spring-boot-parent 作為 parent:

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.0.9</version>
</parent>

女朋友最近想用 elasticsearch 作為搜索引擎,在項(xiàng)目中添加了依賴

<dependency>
 <groupId>org.elasticsearch</groupId>
 <artifactId>elasticsearch</artifactId>
 <version>7.10.2</version>
</dependency>

寫好代碼,一跑,報(bào)類不存在異常:

 java.lang.NoClassDefFoundError: org/elasticsearch/common/xcontent/DeprecationHandler
 at com.lv.springboot.datasource.ClientUTis.main(ClientUTis.java:13)
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.common.xcontent.DeprecationHandler
 at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 ... 1 more

女朋友看了依賴mvn dependency:tree,發(fā)現(xiàn)依賴的elasticsearch版本是:

org.elasticsearch.client:elasticsearch-rest-high-level-client:7.0.1
|--org.elasticsearch:elasticsearch:5.6.16
|--org.elasticsearch.client:elasticsearch-rest-client:7.0.1
|--org.elasticsearch.plugin:parent-join-client:7.0.1
|--org.elasticsearch.plugin:aggs-matrix-stats-client:7.0.1
|--org.elasticsearch.plugin:rank-eval-client:7.0.1
|--org.elasticsearch.plugin:lang-mustache-client:7.0.1

女朋友很著急,明明指定了elasticsearch的依賴了啊,而且是項(xiàng)目的根 pom,依賴不是最短路徑原則么?不應(yīng)該以這個(gè)依賴為準(zhǔn)么?

女朋友于是找我求助,本著面向“對(duì)象”,我立馬放下手頭工作幫忙查看。仔細(xì)一看,原來SpringBoot的DependencyManagement中,org.elasticsearch:elasticsearch已經(jīng)被包含了(以下為節(jié)選):

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.9.RELEASE</version>

<properties>
<elasticsearch.version>5.6.16</elasticsearch.version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

spring-boot 其實(shí)已經(jīng)考慮到用戶可能要換版本了,所以將版本放入了 <properties/>,properties 也具有最短路徑原則,所以可以通過在你的項(xiàng)目根 pom 中的 properties 增加相同 key 修改版本:

<properties>
<elasticsearch.version>7.10.2</elasticsearch.version>
</properties>

所有可以這么替換的屬性, spring-boot 官方文檔已經(jīng)列出了,參考官方文檔附錄:Version Properties

也可以通過 dependencyManagement 的最短路徑原則,通過在你的項(xiàng)目根 pom 中的增加想修改依賴的 dependencyManagement 即可:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.10.2</version>
</dependency>
</dependencies>
</dependencyManagement>

最后,可以記住下面的原則,就知道項(xiàng)目的依賴到底是哪個(gè)版本啦:

Maven依賴可以分為如下幾部分:

  • 直接依賴,就是本項(xiàng)目 dependencies 部分的依賴
  • 間接依賴,就是本項(xiàng)目 dependencies 部分的依賴所包含的依賴
  • 依賴管理,就是本項(xiàng)目 dependency management 里面的依賴
  • parent 的直接依賴
  • parent 的間接依賴
  • parent 的依賴管理
  • bom 的直接依賴(一般沒有)
  • bom 的間接依賴(一般沒有)
  • bom 的依賴管理

可以這么理解依賴:

1.首先,將 parent 的直接依賴,間接依賴,還有依賴管理,插入本項(xiàng)目,放入本項(xiàng)目的直接依賴,間接依賴還有依賴管理之前

2.對(duì)于直接依賴,如果有 version,那么就依次放入 DependencyMap 中。如果沒有 version,則從依賴管理中查出來 version,之后放入 DependencyMap 中。key 為依賴的 groupId + artifactId,value為version,后放入的會(huì)把之前放入的相同 key 的 value 替換

3.對(duì)于每個(gè)依賴,各自按照 1,2 加載自己的 pom 文件,但是如果第一步中的本項(xiàng)目 dependency management 中有依賴的版本,使用本項(xiàng)目 dependency management的依賴版本,生成 TransitiveDependencyMap,這里面就包含了所有的間接依賴。

4.所有間接依賴的 TransitiveDependencyMap, 對(duì)于項(xiàng)目的 DependencyMap 里面沒有的 key,依次放入項(xiàng)目的 DependencyMap

5.如果 TransitiveDependencyMap 里面還有間接依賴,那么遞歸執(zhí)行3, 4。

由于是先放入本項(xiàng)目的 DependencyMap,再去遞歸 TransitiveDependencyMap,這就解釋了 maven 依賴的最短路徑原則。

Bom 的效果基本和 Parent 一樣,只是一般限制中,Bom 只有 dependencyManagement 沒有 dependencies

解決了問題并且給妹子梳理明白之后,妹子答應(yīng)這個(gè)月多給我 100 塊零用錢啦,開心~~~~~

以上就是maven依賴版本沒有生效的解決方案的詳細(xì)內(nèi)容,更多關(guān)于maven依賴版本沒有生效的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java 刪除數(shù)組元素與刪除重復(fù)數(shù)組元素的代碼

    java 刪除數(shù)組元素與刪除重復(fù)數(shù)組元素的代碼

    在java中刪除數(shù)組元素與過濾重復(fù)數(shù)組元素我們都會(huì)需要去遍歷數(shù)組然后根據(jù)我們?cè)O(shè)置的值或方法進(jìn)行去除數(shù)組
    2013-10-10
  • 一篇文章帶你了解SpringBoot Web開發(fā)

    一篇文章帶你了解SpringBoot Web開發(fā)

    這篇文章主要介紹了使用Spring Boot搭建Java web項(xiàng)目及開發(fā)過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Netty進(jìn)階之ChannelPoolMap源碼解析

    Netty進(jìn)階之ChannelPoolMap源碼解析

    這篇文章主要介紹了Netty進(jìn)階之ChannelPoolMap源碼解析,ChannelPoolMap是用來存儲(chǔ)ChannelPool和指定key的一個(gè)集合Map,實(shí)際的應(yīng)用場(chǎng)景就是服務(wù)器端是一個(gè)分布式集群服務(wù),擁有多個(gè)配置地址,這樣我們就可以配置多個(gè)服務(wù)地址,減輕單臺(tái)服務(wù)器的壓力,需要的朋友可以參考下
    2023-11-11
  • springboot如何根據(jù)配置屏蔽接口返回字段

    springboot如何根據(jù)配置屏蔽接口返回字段

    這篇文章主要介紹了springboot如何根據(jù)配置屏蔽接口返回字段問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java透明窗體的設(shè)置方法

    Java透明窗體的設(shè)置方法

    在本文中我們給大家整理了關(guān)于Java透明窗體的設(shè)置方法以及需要注意的地方,需要的朋友們學(xué)習(xí)參考下。
    2019-03-03
  • springboot動(dòng)態(tài)加載Echarts柱狀圖

    springboot動(dòng)態(tài)加載Echarts柱狀圖

    這篇文章主要為大家詳細(xì)介紹了springboot動(dòng)態(tài)加載Echarts柱狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java Arrays快速打印數(shù)組的數(shù)據(jù)元素列表案例

    java Arrays快速打印數(shù)組的數(shù)據(jù)元素列表案例

    這篇文章主要介紹了java Arrays快速打印數(shù)組的數(shù)據(jù)元素列表案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java 中圖片壓縮處理的解決方案

    Java 中圖片壓縮處理的解決方案

    圖片經(jīng)過base64編碼轉(zhuǎn)換后,文件會(huì)變大的原因是因?yàn)閎ase64編碼會(huì)將每個(gè)3字節(jié)的數(shù)據(jù)轉(zhuǎn)換成4字節(jié)的數(shù)據(jù),并且在轉(zhuǎn)換的過程中還會(huì)添加一些額外的字符,這篇文章主要介紹了Java 中如何對(duì)圖片進(jìn)行壓縮處理,需要的朋友可以參考下
    2023-09-09
  • Java Volatile關(guān)鍵字實(shí)現(xiàn)原理過程解析

    Java Volatile關(guān)鍵字實(shí)現(xiàn)原理過程解析

    這篇文章主要介紹了Java Volatile關(guān)鍵字實(shí)現(xiàn)原理過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java JVM內(nèi)存區(qū)域詳解

    Java JVM內(nèi)存區(qū)域詳解

    下面小編就為大家?guī)硪黄趈vm java內(nèi)存區(qū)域的介紹。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-11-11

最新評(píng)論