Pagehelper触发 JVM 类校验失败,Idea 却因 -noverify 藏了雷
问题现象最近一个老的微服务引入了page-helper 6.0版本的 jar 包之后微服务发布到环境上去之后直接启动不起来了报no such constructor错误但是这个微服务在发布到环境上的时候在本地 Idea 里面启动过但是在 Idea 里面启动缺没有任何报错。如下图所示问题复现使用下面的 pom 文件引入依赖包然后将项目打包项目为 jar 包启动就可以复现问题配置如下?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.1.18.RELEASE/version relativePath/ /parent groupIdcom.example/groupId artifactIddemo/artifactId version0.0.1-SNAPSHOT/version namedemo/name descriptionDemo project/description properties java.version1.8/java.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version2.3.2/version /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus/artifactId version2.3.3/version /dependency dependency groupIdcom.github.pagehelper/groupId artifactIdpagehelper-spring-boot-starter/artifactId version2.1.0/version /dependency dependency groupIdcom.h2database/groupId artifactIdh2/artifactId scoperuntime/scope /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build /project但是直接在 Idea 里面启动项目则可以看到是可以正常启动的。如下图所示问题原因启动报错原因从上面报错的堆栈信息可以看到是在AbstractDialect的 57 行报的错但是查看这行代码实际上就是通过 lambda 表达式创建了一个DefaultCountSqlParser对象代码如下同时查看DefaultCountSqlParser的源码发现它本身也没有定义任何有参数的构造函数那它应该是默认有无参构造函数的那为啥会报no such constructor错误呢问题定位到这里有点定位不下去了。代码如下后来又再次去看了报错的堆栈日志发现在它的下面还有Caused by: java.lang.VerifyError: Bad return type报错。如下图所示然后拿着这个报错去问了下 AIAI 的回答可能是 jar 包编译时的版本和运行时的版本不一致且涉及到了方法签名的变更。如下图所示同时查看上面报错的堆栈信息提到了DefaultCountSqlParser的sqlToCount()方法原因是net/sf/jsqlparser/statement/select/PlainSelect is not assignable to net/sf/jsqlparser/statement/select/Select。然后查看这个方法发现它方法的返回值声明类型是net/sf/jsqlparser/statement/select/Select方法内部返回的是net/sf/jsqlparser/statement/select/PlainSelect类型。如下图所示查看net/sf/jsqlparser/statement/select/PlainSelect确实和net/sf/jsqlparser/statement/select/Select没有继承关系同时发现当前实际引入的jsqlparser的版本是 1.1 的版本。然后去 maven 搜索这个 jar 包发现pagehelper-spring-boot-starter实际想要引入的jsqlparser版本是 4.7 的版本但是因为引入了mybatis-plus的 2.3.3 版本它引入了jsqlparser的版本是 1.1同时因为它和pagehelper-spring-boot-starter依赖jsqlparser的路径长度相同且它在 pom 文件声明的前面。按照 maven 依赖调节的原则路径长度相同时会取声明在前的因此引入了jsqlparser的 1.1 版本。如下图所示从类加载的过程分析上面的报错通过new DefaultCountSqlParser属于对一个类型的主动引用会触发类加载类加载又分为加载、验证、准备、解析、初始化。根据《深入理解JVM虚拟机》书中解释在验证过程中会对方法的字节码进行验证。如下图所示对于本案例中在验证的过程中JVM 发现sqlToCount()方法声明返回net/sf/jsqlparser/statement/select/Select同时方法体中返回的是net/sf/jsqlparser/statement/select/PlainSelect类型这就要求它们有继承关系但是因为当前引入的是jsqlparser的版本是 1.1 版本在这个 jar 包它们两个并不具备父子关系因此校验失败了。Idea 启动不报错原因那为啥打包成 jar 包启动就会报错但是在 Idea 中启动就不报错呢最开始我以为是 Idea 自动引入了新版本的 jar 包但是我把 Idea 的启动命令拷贝出来搜索classpath中设置的jsqlparser版本发现它引入的也是 1.1 版本到这里感觉怎么都解释不通了呀如下图所示后面又回去翻了翻书发现书上说有个-Xverify:none参数可以关闭校验巧了的是上面启动命令图中的第一行的最后恰好就是这个参数(-noverify 实际上就是 -Xverify:none 的一个快捷别名)。真相终于大白了Idea 默认应该是把类加载的验证这个操作给关闭了因此通过 Idea 启动的时候不会进行校验自然也不会报错了。那如何让 Idea 启用校验呢在 Idea 的 Run/Debug Configurations 这里把 Disable launch optimization 这个配置相勾选上然后启动项目在控制台就可以看到一模一样的报错了。如下图所示

相关新闻

Web测试和App测试的区别

Web测试和App测试的区别

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 相同点从软件测试方法看都需要进行功兼容性测试,能测试、性能测试、GUI测试,安全性测试,易用性测试等从软件测试流程看都需要…

2026/7/3 18:57:27 阅读更多 →
微美全息(NASDAQ:WIMI)BlockEdge框架:为工业4.0开辟区块链与边缘计算创新之路

微美全息(NASDAQ:WIMI)BlockEdge框架:为工业4.0开辟区块链与边缘计算创新之路

工业4.0,作为新工业革命的里程碑,不仅预示着制造业的全面数字化转型,还承载着实现安全、智能、自主和自适应工业物联网(Industrial Internet of Things,IIoT)的宏伟愿景。这一转型不仅仅是技术的迭代升级&a…

2026/7/9 15:04:02 阅读更多 →
【大模型开源教程】Llama3-Chinese-8B:专为中文打造的大语言模型,领航智能对话

【大模型开源教程】Llama3-Chinese-8B:专为中文打造的大语言模型,领航智能对话

一、介绍 LLaMA 3 (Large Language Model Meta AI) 是 Meta(原 Facebook)发布的一个大规模预训练语言模型系列的第三代版本。LLaMA 3 旨在推动自然语言处理(NLP)的研究和应用,其系列模型具有较强的语言理解和生成能力…

2026/7/8 22:11:16 阅读更多 →

最新新闻

TDSQL 与 TDSQL-C 对比:binlog 备份策略的 2 种架构与 3 点核心差异

TDSQL 与 TDSQL-C 对比:binlog 备份策略的 2 种架构与 3 点核心差异

TDSQL 与 TDSQL-C 的备份架构演进:从 binlog 到 redo log 的技术跃迁1. 数据库备份机制的设计哲学在分布式数据库领域,备份策略从来都不只是技术实现问题,更是产品设计哲学的体现。TDSQL 作为腾讯云自研的分布式数据库产品线,其传…

2026/7/10 11:57:37 阅读更多 →
长尾关键词在SEO优化中的应用及效果分析

长尾关键词在SEO优化中的应用及效果分析

本文将重点分析“长尾重要词在SEO优化中的应用及效果”。长尾重要词是那些由三个或更多词组成,搜索量较低但更具针对性的词组。它们在SEO中扮演着重要角色,因为能改善网站排名并吸引精准流量。通过探讨长尾重要词如何与核心重要词相辅相成,提…

2026/7/10 11:57:37 阅读更多 →
终极指南:如何免费获取百度文库文档的完整解决方案

终极指南:如何免费获取百度文库文档的完整解决方案

终极指南:如何免费获取百度文库文档的完整解决方案 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 你是否经常在百度文库找到宝贵的学习资料或工作文档,却被下载限制所困扰…

2026/7/10 11:57:37 阅读更多 →
从零构建私有化AI应用:本地部署、RAG、微调与Dify实战指南

从零构建私有化AI应用:本地部署、RAG、微调与Dify实战指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 想用AI大模型做点自己的东西,但一搜教程就懵了?本地部署、RAG、微调、Dify……这些词看着都懂,连起…

2026/7/10 11:55:35 阅读更多 →
Claude Code项目延期率高达67%?2024最新行业数据揭示:真正卡点不在编码而在流程设计(附可落地SOP)

Claude Code项目延期率高达67%?2024最新行业数据揭示:真正卡点不在编码而在流程设计(附可落地SOP)

更多请点击: https://intelliparadigm.com 第一章:Claude Code项目延期率背后的系统性真相 Claude Code项目在多个迭代周期中持续出现交付延期,表面归因于需求变更频繁或开发人力不足,但深入分析 reveals 一组被长期忽视的系统性…

2026/7/10 11:53:34 阅读更多 →
游戏网络延迟实测:C#中UDP与TCP性能对比与选型指南

游戏网络延迟实测:C#中UDP与TCP性能对比与选型指南

1. 项目概述:为什么要在游戏场景下较真UDP和TCP的延迟?“UDP比TCP快”,这几乎是网络编程领域的一句“政治正确”。无论是教科书、技术博客还是面试官的随口一提,都在不断强化这个认知。但作为一名在一线摸爬滚打多年的C#后端开发者…

2026/7/10 11:53:34 阅读更多 →

日新闻

STM32与LTC1864高精度ADC的SPI通信实现

STM32与LTC1864高精度ADC的SPI通信实现

1. 项目背景与核心需求在工业控制和嵌入式系统开发中,模拟信号与数字系统的无缝集成一直是工程师面临的关键挑战。LTC1864作为一款16位高精度ADC转换器,配合STM32F101ZG这类主流微控制器,能够构建高性能的模拟信号采集系统。这种组合特别适合…

2026/7/10 0:03:07 阅读更多 →
猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频无法下载而烦恼吗&am…

2026/7/10 0:05:09 阅读更多 →
直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

1. 直流有刷电机驱动方案概述在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,仍然是许多应用场景的首选驱动方案。TC78H653FTG作为东芝推出的新一代H桥驱动器,与MKV46F256VLH16微控制器配合使用&#xff0c…

2026/7/10 0:05:09 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻