前言
我们在使用maven构建项目时,可能会遇到很引用库依赖冲突的问题,而引用的库越多出现冲突的可能性就越大;本文将对此问题提供几个解决方案,并且帮助读者能够更好的理解什么时版本冲突,怎样更好的去避免它。
场景
首先,想象一下,你作为一个研发人员参与了一个大型且很有趣的项目,这个项目引用许多方便有用的第三方技术库。maven的好处就是非常方便高效的管理这些依赖库的下载、版本选择以及更新。某天,你发现了一个第三方库能够很好的解决在项目中的一个认证功能模块,并且可以减少大量的工作;当你引入之后,却发现程序中某一个地方出现的错误提示;而且这个地方之前从来没有被出错过,也没有人修改过;首先想到的就是自己的代码导致的,应该是自己做了什么不正确的改动;与此同时你也很确定,功能代码是没有问题的。通过调试,可能出现一些类似 NullPointerException
或者 NoSuchMethodException
的异常信息。最直接的操作可能是把依赖库更新到最新版本,但是这样解决不了任何问题;下一步可能是检查这个类库的代码,发现用到的发现或者类不一定都存在,更新到最新版本之后,依然可能出现这样的问题。
更进一步,你通过查看本地的maven依赖仓库,发现仓库下面有同一个依赖库的两个不同版本,你的项目却引用的是一个旧的版本,但是却又不知道为什么项目引用到旧的版本…
恭喜你,你发现了引用库的版本冲突导致项目挂掉的问题!是你在引用一个第三方库时导致。
问题
为什么会出现版本冲突问题呢?