Maven项目中的依赖出现版本冲突,最终发现是对Dependency Scope理解有误

简介: 本文记录一下遇到maven依赖版本冲突后的排查过程说明以及问题原因说明

在这里插入图片描述
再来个文章目录

本文记录一下遇到maven依赖版本冲突后的排查过程说明以及问题原因说明
下面还有投票,帮忙投个票👍

背景

最近加入了 Apache Dubbo 开源社区,成为了一名Dubbo Contributor。在熟悉Dubbo中的各个RPC协议时根据官网提供的示例搭建了一个示例。在熟悉过后想看下谷歌提供的grpc协议在使用上与dubbo提供的grpc协议的区别,所以打算根据grpc github 基础教程跑一个示例,在引入相关依赖以及代码后进行编译,发现一处报错:
在这里插入图片描述
经过初步排查发现是依赖版本问题
在这里插入图片描述

疑问

我不禁就有了疑问,我明明引入的grpc版本是1.54.0,为啥子编译完是1.31.1?
为了验证我的疑问是合理的,通过mvn dependency:tree命令以及版本对比,更加增加了我的疑惑。如下图,grpc-netty-shaded依赖中的grpc-core确确实实是1.54.0,为啥子就成了1.31.1了?无中生有?
在这里插入图片描述

排查过程

起初我怀疑是dubbo-bom的问题,不会呀,dubbo-bom在父工程中以dependencyManagement形式存在,我没有引入依赖它是不会传递的呀?随即立马打消了这个疑问
在这里插入图片描述

然后开始没有目的的百度😂==maven版本冲突问题?== ,结果是没有任何头绪,只有Maven Helper插件帮忙解决冲突问题,但是我想知道的是为什么会冲突。
在这里插入图片描述

紧接着又去github上提了一个issue ==为什么根据官方提供的依赖出现版本冲突问题?== 😂
在这里插入图片描述

过了一天后看没人回答,想了想难道真的是dubbo bom问题? 于是我注释了dubbo bom的依赖,可以了!!! 这是为什么?我没有引入dubbo bom任何依赖呀?难道是这个scope导致的?

于是我又继续百度 ==maven denpendency scope== 😂 ,这些结果要么没有对scope为import的说明,要么就是很含糊抽象,看上去跟我之前的理解一样。
在这里插入图片描述

由于百度的结果并不能解决我的问题,所以上maven官网看了下对Dependency Scope的说明
在这里插入图片描述
最后定位问题所在。

问题存在的原因

scope为import是指依赖项将被部分中的有效依赖项列表所取代

这个说明非常具体,一下就打消了我所有的疑惑。因为dubbo-bom中存在dubbo-rpc-grpc依赖项,而其又有grpc的依赖
在这里插入图片描述
根据官网上的说明,我在子工程中声明版本为1.54.0的grpc依赖项会被其所替代。

所以出现了这个问题😂

总结

通过这次版本冲突问题,让我意识到我对maven的了解远远不够。平时只是对其使用,出现冲突直接解决,并不会去深究为什么。也是通过这次的问题让我对maven多了点了解,让我对解决问题的方式更加深刻:遇到问题不要上来就百度😂,要学会分析、要学会在官网上寻找问题所在,要对一个知识有全面的了解。

示例依赖版本说明

dubbo-bom依赖如下

<dependency>
  <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo-bom</artifactId>
  <version>${dubbo.version}</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

grpc依赖如下

<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-netty-shaded</artifactId>
  <version>1.54.0</version>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-protobuf</artifactId>
  <version>1.54.0</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-stub</artifactId>
  <version>1.54.0</version>
</dependency>
<dependency> <!-- necessary for Java 9+ -->
  <groupId>org.apache.tomcat</groupId>
  <artifactId>annotations-api</artifactId>
  <version>6.0.53</version>
  <scope>provided</scope>
</dependency>
相关文章
|
4天前
|
Java 应用服务中间件 Maven
Mac使用Idea配置传统SSM项目(非maven项目)
Mac使用Idea配置传统SSM项目(非maven项目)
13 1
|
4天前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
14 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
5天前
|
Java Maven
成功解决IDEA中建立新项目Maven会默认选择配置(图解详细说明)
这篇文章提供了在IntelliJ IDEA中设置新项目的Maven配置的详细步骤,包括如何通过菜单路径进入设置,选择Maven配置,以及展示设置后的效果,还提供了Maven的安装教程和解决导入项目时jar包下载问题的方案。
成功解决IDEA中建立新项目Maven会默认选择配置(图解详细说明)
|
5天前
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
|
3天前
|
Java Apache Maven
Maven 项目文档
本节介绍如何创建Maven项目文档。以在`C:/MVN`下的`consumerBanking`项目为例,使用`mvn archetype:generate`命令快速搭建。需在`pom.xml`中添加`maven-site-plugin`和`maven-project-info-reports-plugin`插件配置以避免运行`mvn site`时出现`NoClassDefFoundError`错误,确保`maven-site-plugin`版本为3.3或以上。
|
4天前
|
前端开发 Java 测试技术
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
|
4天前
|
Java Apache Maven
Maven 项目文档
本章介绍如何创建Maven项目文档。以在C:/MVN目录下的`consumerBanking`项目为例,使用`mvn archetype:generate`命令快速搭建。需配置pom.xml,添加maven-site-plugin和maven-project-info-reports-plugin插件,版本分别为3.3和2.7,以避免运行`mvn site`时出现类找不到的错误。
|
5天前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
9天前
|
Java Apache Maven
Maven 项目文档
本章介绍如何创建Maven项目文档。例如,在C:/MVN下创建名为`consumerBanking`的项目,可通过命令`mvn archetype:generate`快速搭建。之后需在`pom.xml`中添加或更新插件配置,如`maven-site-plugin`版本至3.3,以避免运行`mvn site`时遇到类未找到错误。这确保文档能成功生成。
|
9天前
|
XML Java Maven
"Maven项目模块化大揭秘!掌握Model间最佳继承设计,让你的代码优雅如诗,项目维护不再愁!"
【8月更文挑战第11天】Maven是Java项目中常用的构建工具,其模块化特性对大型项目的管理至关重要。本文介绍Maven中的继承与聚合机制,指导如何通过继承消除重复配置,以及如何通过聚合统一构建多个模块。遵循单一职责原则,文章建议按功能划分模块,并提供了父POM与子POM的配置示例。此外,还讨论了适度模块化、依赖管理的原则,帮助提升项目的可维护性和扩展性。
22 4