前言
最近在進行項目重構,在架構師的建議下,就把項目中mybatis切換成mybatis-plus。由於mybatis-plus在mybatis的基礎上只作加強不作改變,所以切換的成本很低,就只需改jar和配置內容,原先的代碼無需改動。java
由於mybatis-plus對mybatis的友好支持,咱們花了一點時間就把mybatis改爲mybatis-plus,那改形成不成功,先啓動一下看不就知道了。然而一啓動就翻車了,報了以下的錯誤apache
com.baomidou.mybatisplus.core.MybatisConfiguration.getLanguageDriver(Ljava/lang/Class;)Lorg/apache/ibatis/scripting/LanguageDriver;
完整的異常信息以下圖 session
排查思路
從打印的異常信息,咱們知道是不存在getLanguageDriver()這個方法。跟進源碼會發現 getLanguageDriver這個方法多是由mybatis
com.baomidou.mybatisplus.core.MybatisConfiguration
或者MybatisConfiguration的父類架構
org.apache.ibatis.session.Configuration
提供。由異常信息咱們能夠猜想若是項目要啓動成功,就須要getLanguageDriver這個方法,而項目目前引用的MybatisConfiguration及其Configuration都無力提供,由此咱們能夠推斷咱們項目引入冒牌的MybatisConfiguration或者Configuration。更進一步的推斷咱們項目中應該存在多個 MybatisConfiguration或者Configuration。用人話來講,就是咱們項目存在類衝突,更直白點就是jar衝突maven
驗證過程
一、項目中存在多個MybatisConfiguration?搜索引擎
按住快捷鍵Ctrl+Shift+R 很遺憾事情不是咱們想的那樣,MybatisConfiguration只有一個插件
二、項目中存在多個Configuration?code
按住快捷鍵Ctrl+Shift+R索引
果真存在2個Configuration。
三、驗證包衝突
利用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依賴衝突以及解決方法