Eclipse运行Kotlin代码出现JDT插件类实例化及栈映射帧缺失错误
报错核心成因
出现该问题的本质是Eclipse运行时的JVM字节码校验规则不匹配:Java 6及之后的版本会对加载的类文件做栈帧校验,当运行Eclipse的JVM版本与Eclipse核心插件的类文件编译版本不兼容时,就会触发栈帧缺失的校验报错,连带导致org.eclipse.jdt.launching插件无法正常初始化源码查找类。你编写的Kotlin测试代码本身没有语法问题,不需要做业务逻辑修改。
分步解决操作
- 调整Eclipse启动参数绕过严格栈帧校验
打开Eclipse安装根目录下的eclipse.ini配置文件,找到-vmargs所在的段落,在段落末尾单独新增一行写入参数-XX:-UseSplitVerifier,保存文件后重启Eclipse。该参数会关闭Java 7及以上版本默认开启的严格栈帧检查,直接规避这类校验报错。 - 对齐项目的JRE编译配置
右键点击你的Kotlin项目 → 打开「属性设置」→ 进入「Java构建路径」页面,检查「库」标签下绑定的JRE系统库版本,确保和Eclipse当前配置的默认执行环境完全一致;再进入「Java编译器」设置页,把编译器合规级别调整为和绑定JRE匹配的版本(比如绑定JDK8就选择1.8,不要设置版本差值过大的合规等级)。 - 清理损坏的启动配置缓存
打开顶部菜单栏的「运行」→ 选择「运行配置」,找到之前尝试运行代码时生成的旧Kotlin启动配置,直接删除该配置;再右键你的Kotlin主代码文件,选择「运行方式」→「Kotlin应用程序」,重新生成全新的启动配置,避免旧缓存中残留的错误类加载路径触发插件加载异常。 - 高版本JDK启动的适配方案
如果你当前是使用JDK 11及以上版本启动Eclipse,上述关闭栈帧校验的参数会失效,此时需要将启动Eclipse的JDK切换为JDK 8版本,匹配当前Eclipse、Kotlin插件的兼容要求,从根源上避免字节码校验规则不匹配的问题。
内容的提问来源于stack exchange,提问作者Alex Biedermann
相关产品推荐
相关产品推荐

