升级mybatis-plus导致项目启动报错: net.sf.jsqlparser.statement.select.SelectBody

由于mybatis-plus的3.5.6及以下版本存在SQL注入漏洞,所以把系统的mybatis-plus版本升级到了3.5.7,项目启动时,后台日志报错:nested exception is java.lang.NoClassDefFoundError::net.sf.jsqlparser.statement.select.SelectBody

详细分析:

1. 错误问题:

ClassNotFoundException是Java的常见异常,表示JVM在类路径中找不到指定的类。
NoClassDefFoundError 表示在编译时能找到类,但在运行时无法加载所需的类。

net.sf.jsqlparser.statement.select.SelectBody是JSqlParser库中的类,用于解析SQL的SELECT语句结构。

‌
2. 可能原因‌:

  • 依赖未正确引入‌:项目未添加JSqlParser的依赖,或依赖版本错误。
  • 依赖冲突‌:项目中存在多个不同版本的JSqlParser,导致类加载失败。
  • 打包问题‌:构建工具(如Maven/Gradle)未将依赖正确打包到最终产物中。

3. 解决方案‌:

‌检查maven依赖配置‌:

确保pom.xml(Maven)或build.gradle(Gradle)中包含正确的JSqlParser依赖。

经过排查升级的mybatis-plus-boot-starter包和系统中存在的分页jar包pagehelper-spring-boot-starter都存在jsqlparser包,两个版本不一致导致的系统报错,所以排除掉升级包中的对应jsqlparser即可。

方式一:排除冲突依赖

xml 复制代码
<!-- 新升级的mybatis-plus -->
<dependency>
	<groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.7</version>
    <exclusions>
    	<exclusion>
    	 	<groupId>com.github.jsqlparser</groupId><!--排除掉冲突包 -->
    		<artifactId>jsqlparser</artifactId>
    	</exclusion>
    </exclusions> 
</dependency>

<!-- pagehelper分页包 -->
<dependency>
	<groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.1</version>
</dependency>

‌方法二:调整依赖顺序‌

xml 复制代码
<!-- PageHelper放在MyBatis Plus上面 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>

4. 总结:

项目启动时报错nested exception is java.lang.NoClassDefFoundError:,除了未正确引入jar包外,也有可能是多个jar包之间存在不同版本的依赖冲突,本次报错就是依赖冲突导致的,所以在排除maven报错时需要额外注意不同版本可能引起的冲突。

相关推荐
金銀銅鐵7 分钟前
[Java] 用 GUI 展示 ArrayList 扩容的过程
java·后端·ai编程
磊 子9 分钟前
什么是虚假唤醒(spurious wakeup)?从 POSIX 标准讲到 futex 内核
java·开发语言
飘然生20 分钟前
traceId链路 skywalking java agent
java·开发语言·skywalking
IT研究室26 分钟前
最新计算机毕业设计选题推荐-基于spring boot的母婴全程服务管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
CRMEB35 分钟前
商品 SKU 设计,从简单规格到多规格踩过什么
java·前端·数据库·开源
霸道流氓气质36 分钟前
基于 Spring @Profile 的 MQ 消费者按需开关设计
java·后端·spring
silvamux_1 小时前
4款新模型商务邮件翻译横评:0.98到0.46
android·java·javascript
霸道流氓气质1 小时前
Redisson BloomFilter:分布式位图实现、误判率调优与缓存穿透三级防护的 Spring Boot 生产级实战
spring boot·分布式·缓存
Dovis(誓平步青云)1 小时前
车辆进入隧道后信号断开,座舱旅程怎样补回事件
java·开发语言·前端·数据库·电脑
砚底藏山河1 小时前
数据新鲜度 SLA 监控
java·大数据·python·maven