前言
最近在进行我的项目重构,在架构师的倡议下,就把我的项目中 mybatis 切换成 mybatis-plus。因为 mybatis-plus 在 mybatis 的根底上只做加强不做扭转,因而切换的老本很低,就只需改 jar 和配置内容,原先的代码无需改变。
因为 mybatis-plus 对 mybatis 的敌对反对,咱们花了一点工夫就把 mybatis 改成 mybatis-plus,那革新成不胜利,先启动一下看不就晓得了。然而一启动就翻车了,报了如下的谬误
com.baomidou.mybatisplus.core.MybatisConfiguration.getLanguageDriver(Ljava/lang/Class;)Lorg/apache/ibatis/scripting/LanguageDriver;
残缺的异样信息如下图
排查思路
从打印的异样信息,咱们晓得是不存在 getLanguageDriver()这个办法。跟进源码会发现
getLanguageDriver 这个办法可能是由
com.baomidou.mybatisplus.core.MybatisConfiguration
或者 MybatisConfiguration 的父类
org.apache.ibatis.session.Configuration
提供。由异样信息咱们能够猜想如果我的项目要启动胜利,就须要 getLanguageDriver 这个办法,而我的项目目前援用的 MybatisConfiguration 及其 Configuration 都有力提供,由此咱们能够推断咱们我的项目引入冒牌的 MybatisConfiguration 或者 Configuration。更进一步的推断咱们我的项目中应该存在多个
MybatisConfiguration 或者 Configuration。用人话来说,就是咱们我的项目存在类抵触,更直白点就是jar 抵触
验证过程
1、我的项目中存在多个 MybatisConfiguration?
按住快捷键 Ctrl+Shift+R
很遗憾事件不是咱们想的那样,MybatisConfiguration 只有一个
2、我的项目中存在多个 Configuration?
按住快捷键 Ctrl+Shift+R
果然存在 2 个 Configuration。
3、验证包抵触
利用 maven-helper 插件查看 jar 抵触
很显著存在 mybatis 包抵触,而且咱们我的项目引入的 3.4.4 版本的 mybatis,而 mybatis-plus 须要引入的是 3.5.3 版本的 mybatis
解决思路
借助 maven-helper 插件,咱们能够看出我的项目是因为包传递依赖间接引入 3.4.4 版本的 mybatis。因而咱们把有援用 3.4.4 版本 mybatis 的我的项目升级成引入 mybatis 3.5.3 版本就行
总结
本文呈现的坑挺常见的,利用搜索引擎应该都能够找到答案。写这篇文章除了介绍如何解决这个坑,次要还是想介绍一种排查问题的思路,即 假如验证法。因为并不是每次都能够从搜索引擎上找到答案,此时咱们就能够依据已知信息去一步步论证推断。最初如果对 maven 抵触解决感兴趣的敌人,能够查看下我之前写的文章
maven 依赖抵触以及解决办法