中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

maven依賴版本中沒有按照最短路徑原則生效如何解決

發布時間:2021-01-29 17:12:09 來源:億速云 閱讀:248 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關maven依賴版本中沒有按照最短路徑原則生效如何解決,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

parent:

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

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

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

寫好代碼,一跑,報類不存在異常:

 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,發現依賴的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
<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 其實已經考慮到用戶可能要換版本了,所以將版本放入了 <properties/>,properties 也具有最短路徑原則,所以可以通過在你的項目根 pom 中的 properties 增加相同 key 修改版本:

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

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

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

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

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

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

  • 直接依賴,就是本項目 dependencies 部分的依賴

  • 間接依賴,就是本項目 dependencies 部分的依賴所包含的依賴

  • 依賴管理,就是本項目 dependency management 里面的依賴

  • parent 的直接依賴

  • parent 的間接依賴

  • parent 的依賴管理

  • bom 的直接依賴(一般沒有)

  • bom 的間接依賴(一般沒有)

  • bom 的依賴管理

可以這么理解依賴:

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

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

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

4.所有間接依賴的 TransitiveDependencyMap, 對于項目的 DependencyMap 里面沒有的 key,依次放入項目的 DependencyMap

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

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

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

以上就是maven依賴版本中沒有按照最短路徑原則生效如何解決,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南投市| 吉木乃县| 绥中县| 田林县| 彭水| 卓尼县| 枣庄市| 淄博市| 新疆| 堆龙德庆县| 合山市| 海原县| 新和县| 岳池县| 崇州市| 祥云县| 弥渡县| 攀枝花市| 绍兴县| 青岛市| 望奎县| 子长县| 安乡县| 锡林郭勒盟| 菏泽市| 安康市| 林口县| 阳江市| 双江| 广灵县| 盈江县| 墨竹工卡县| 什邡市| 天峻县| 南部县| 都匀市| 岳西县| 合肥市| 鹰潭市| 缙云县| 富顺县|