我在开发黑马苍穹外卖项目时,引入 MyBatis - Plus 依赖后,遭遇了 MyBatis 和 MyBatis - Plus 版本冲突的错误,经过一番排查与实践,终于解决,现将过程分享如下:
一、问题现象
项目启动时抛出org.springframework.beans.factory.UnsatisfiedDependencyException
异常,底层嵌套java.lang.NoSuchFieldError: IGNORED
错误,提示在创建SqlSessionFactory
等 Bean 时出现问题,初步判断是 MyBatis - Plus 相关依赖版本不兼容导致。
二、问题根源
(一)依赖版本不一致
在sky - pojo
模块中,mybatis - plus - annotation
的版本为3.5.11
,而主模块sky - server
中mybatis - plus - boot - starter
版本是3.5.3.1
,二者版本不匹配,使得注解与核心库无法协同工作 。
(二)MyBatis 核心库兼容问题
MyBatis - Plus 3.5.3.1 对 MyBatis 核心库有特定版本要求,项目中引入的 MyBatis 版本不满足其期望,导致出现NoSuchFieldError: IGNORED
错误,该错误源于 MyBatis - Plus 期望在 MyBatis 中找到IGNORED
字段,但实际版本不包含此内容。
三、解决方案
(一)统一 MyBatis - Plus 相关依赖版本
在sky - pojo
模块里,将mybatis - plus - annotation
的版本修改为与sky - server
中mybatis - plus - boot - starter
一致的版本,确保整个项目中 MyBatis - Plus 相关依赖版本统一。修改后的pom.xml
依赖如下:
xml
<!-- 在sky - pojo模块中修改 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis - plus - annotation</artifactId>
<version>3.5.3.1</version> <!-- 与主模块版本一致 -->
<scope>compile</scope>
</dependency>
(二)清理并重新构建项目
- 执行
mvn clean install
命令,清理项目原有构建产物并重新构建,确保新的依赖配置生效。 - 在 IDE(如 IntelliJ IDEA)中,执行 "Invalidate Caches" 操作清理缓存并重启 IDE,避免旧缓存影响新依赖加载。
四、总结
在使用 MyBatis - Plus 这类框架时,要注意相关依赖的版本兼容性。不同模块间的依赖版本要保持统一,否则容易出现类找不到、字段不存在等诡异错误。这是我的排查步骤:
- 检查所有相关依赖的版本,找出不一致的部分;
- 统一版本,确保依赖协同工作;
- 清理构建产物与 IDE 缓存,重新构建项目。