Maven 包冲突解决过程

记录一次 maven 包冲突解决过程,项目地址链接

查看错误方法

首先要将项目克隆到本地,然后运行,找到出错的位置,以及出错的信息。
 image.png
如图所示,错误的位置在 MainTest.java 文件第六行,错误信息 NoSuchMethod ,表示没有找到这个方法。根据位置提示,一层一层往下找,发现原来是 A.java 这个类中调用的 getJsonpFunction 方法找不到

image.png

查看包冲突

通过使用 maven helper 插件查看包的依赖树。如图所示,spring-web:5.1.8.RELEASE 版本和 spring-web:4.3.6.RELEASE 版本冲突了。图上的 4.3.6 版本为红色,可知,maven 使用的是 5.1.8 版本。我们根据 maven 解决包冲突的就近原则来看,5.1.8 离项目的距离为1,4.3.6 的距离为2,因此保留5.1.8版本,再次证实了这一点。

image.png

追根溯源

既然知道了是 spring-web 这个包的问题。我们就访问 maven 仓库,找到对应的版本,访问他的 github 主页。

image.png
找到了 github 仓库,进入报错的那个类,通过切换 tags 来切换不同版本对应的源代码,两者进行比较。

image.png
对比发现在5.1.8版本 org.springframework.http.converter.json.MappingJacksonValue 中不存在 getJsonpFunction  这个方法。而 4.3.6 中却有。因此可以断定,我们项目本该使用 4.3.6 版本,而 maven 帮我们剔除了 4.3.6 版本,保留了 5.1.8 版本,导致找不到 getJsonFunction 而报错。

image.png

解决冲突

知道了冲突的原因,我们就只需要把 5.1.8 版本的依赖注释掉就行,这样 maven 就会帮我们加载 4.3.6 版本的包了。

image.png
同时也可以将 5.1.8 版本的依赖改成 4.3.6 版本,解决冲突。


Maven 包冲突解决过程
http://wszzf.top/2021/03/03/Maven 包冲突解决过程/
作者
Greek
发布于
2021年3月3日
许可协议