在使用 jenkins 打包自动部署项目时,偶尔会出现项目正常部署,访问部分功能时,抛出如下错误:
Caused by: java.lang.VerifyError: Operand stack overflow Exception Details: Location: net/sf/jsqlparser/parser/CCJSqlParser.AlterExpression()Lnet/sf/jsqlparser/statement/alter/AlterExpression; @0: new Reason: Exceeded max stack size. Current Frame: bci: @0 flags: { } locals: { 'net/sf/jsqlparser/parser/CCJSqlParser' } stack: { } Bytecode: 0x0000000: bb0f 7459 b705 b44c 014e 013a 0401 3a05 0x0000010: 013a 0701 3a08 013a 0901 3a0a 013a 0b01 0x0000020: 3a0c 013a 0d01 3a0e bb05 b559 b705 b63a 0x0000030: 0f2a b400 0d02 a000 0a2a b700 0ea7 0007 0x0000040: 2ab4 000d ab00 0000 0000 1dee 0000 0006 0x0000050: 0000 0005 0000 003c 0000 0009 0000 1d8a 0x0000060: 0000 000b 0000 003c 0000 0027 0000 155a 0x0000070: 0000 004e 0000 1622 0000 00a1 0000 003c ....
问题原因:
java.lang.VerifyError: Operand stack overflow 是 Java 虚拟机在验证字节码时遇到的错误。这个错误通常发生在操作数栈溢出的情况下,也就是操作数栈超出了其最大容量。
通常情况下,这种错误发生时可能是字节码结构有问题,或者字节码与实际运行环境不匹配。也可能是 Java虚拟机(JVM)本身存在 bug,或者字节码被篡改。
要解决这个问题,你可以尝试以下几个步骤:
(1)检查字节码是否存在错误或不一致的地方,确保其符合Java虚拟机规范。
(2)确保字节码与你使用的JVM版本兼容。
(3)如果字节码被修改或篡改过,尝试使用原始未修改的版本。
(4)如果问题仍然存在,考虑升级到 JVM 的新版本,或者尝试使用其他的 JVM 实现。
解决办法:
重新打包部署