通过maven构建的java项目,各依赖的版本是如何确定的?
我在java项目中使用maven管理依赖。其中借助依赖工具查看,commons-codec的版本是1.16.0。最终构建出来的jar包中也是1.16.0版本。
但是我通过idea自带的依赖分析工具查看,commons-codec有两个来源,根据颜色,1.16.0版本应该是是在poi中指定的但是poi-4.1.2中指定的却是1.13版本
我又查看了httpclient中的配置,是1.9版本的commons-codec。这里是因为httpclient是继承自httpcomponents-client,httpcomponents-client中配置了1.9
所以我想知道为什么最终是1.16版本的commons-codec

Maven依赖决策
只有两个原则:
- 最短路径优先
pom
中先声明的优先
比如你问题中的commons-codec
(大概举例,没太看清楚)路径1:kc-common
-->aliyun-sdk-oss
-->http-client
-->commons-codec
路径2:kc-common
-->poi-ooxml
-->poi
-->commons-codec
你这两个路径长短一样,就会看aliyun-sdk-oss
和poi-ooxml
在kc-common
中的声明顺序,目前大概率是aliyun-sdk-oss
在前
version
问题
httpcomponents-client
中配置了1.9
poi-4.1.2
中指定的是1.13
版本最终是1.16.0
1.看你的pom
是不是有<parent>
标签,比如声明了spring-boot-parent
,这里面会声明 version
,会将整个项目中依赖的version
全部统一为声明的版本2.如果有<parent>
标签,并且声明的version
不是1.16.0
,那你看自己的pom
中是不是写了<properties>
定义,覆盖了<parent>
中的version
,会以你定义的为准3.查看当前pom
是不是声明了<dependencyManagement>
统一管理了version
4.是否使用了三方的bom
来管理了版本,三方bom
依赖会定义一系列version
来统一版本5.如果有多个bom
对同一个库进行了版本管理,先声明的版本会统一整个项目的版本
确定version
1.你可以在idea安装Maven Helpher
插件,通过Dependency Analyzer
标签的All Dependencies as Tree
来查看红色的依赖2.在项目启动类main里写某个Jar里面具体的一个类,import
进去,点击到源码,点击Project
栏,点击Select Opened File
就可以确定运行时具体决策的jar是哪个版本

- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容