四个Maven项目A,B,C,D
项目A锁定了D的版本为1.0
项目B使用项目A作为父项目, 项目B引用了项目C
项目C引用了项目D,并指定D的版本为2.0
出现问题: 项目B中D的版本号不是2.0, 而是1.0
原因: 传递依赖被依赖管理锁定版本(https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies)
解决:
方法一:
在B项目中锁定D的版本为2.0
方法二:
在B项目中引入版本为2.0的D
方法三:
如果你项目的parent或grandparent是像Spring Boot这种依赖的具体版本定义在properties属性中, 你也可以在你项目中用properties覆盖对应的版本属性
比如你项目的parent为spring-boot-starter-parent-1.4.5.RELEASE,而它项目的中elasticsearch版本锁定在2.4.4
如果你想指定elasticsearch的版本为7.1.1,你可以在你项目POM文件加入以下properties属性指定.
<properties>
<elasticsearch.version>7.1.1</elasticsearch.version>
</properties>