解決 java.lang.VerifyError: Stack map does not match the one at exception
背景
在寫AOP程序時,測試出現了錯誤,jdk版本11。
問題根源
JVM加載class文件時會做字節碼校驗(bytecode verification)。如果你的class文件是由java源文件通過javac編譯出來的,那麼基本上不用擔心bytecode verification。 如果class文件是由asm、cglib等動態生成出來的或者由其它編譯器生成的,那麼JVM在校驗它的bytecode時就有可能失敗。 失敗的原因可能是你生成的bytecode有bug,也可能是由於新版本的JVM加入了新的驗證條件後導致原來可以通過驗證的bytecode現在不能通過了。
很多Java框架都會動態生成class文件,再加上JVM版本也會時不時地修改它的bytecode verification行爲。 所以,運行代碼時偶爾會遇到java.lang.VerifyError錯誤。 在不能修改框架代碼或者切換JVM實現的情況下,JVM提供了一些選項可以讓你改變或者繞過bytecode verification。
解決方案
進行參數配置,禁止字節碼校驗。
配置vm參數 -noverify