通过maven构建的java项目,各依赖的版本是如何确定的?-灵析社区

我买了30万的鞋子

我在java项目中使用maven管理依赖。其中借助依赖工具查看,commons-codec的版本是1.16.0。 最终构建出来的jar包中也是1.16.0版本。 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240919/c2ea161d8359a762724cecb360ca81f7.png) 但是我通过idea自带的依赖分析工具查看,commons-codec有两个来源,根据颜色,1.16.0版本应该是是在poi中指定的 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240919/2dc580bd81f0f49cad78f5aea0f368d4.png) 但是poi-4.1.2中指定的却是1.13版本 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240919/916b9e404db9712f88a2a65f93944ada.png) 我又查看了httpclient中的配置,是1.9版本的commons-codec。这里是因为httpclient是继承自httpcomponents-client,httpcomponents-client中配置了1.9 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240919/759764f7ec1aaf1f784e1191161cd342.png) 所以我想知道为什么最终是1.16版本的commons-codec

阅读量:182

点赞量:0

问AI
Maven依赖决策 只有两个原则: 1. 最短路径优先 2. "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"是不是有""标签,比如声明了"spring-boot-parent",这里面会声明 "version",会将整个项目中依赖的"version"全部统一为声明的版本 2.如果有""标签,并且声明的"version"不是"1.16.0",那你看自己的"pom"中是不是写了""定义,覆盖了""中的"version",会以你定义的为准 3.查看当前"pom"是不是声明了""统一管理了"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是哪个版本