Java 7 JVM VerifyError in Eclipse

2022-09-01 09:04:16

当我使用JDK 7在eclipse indigo中编译我的项目时,我得到以下错误对话框

enter image description here

使用以下堆栈跟踪

Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at branch target 32 in method ... at offset 0
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

我在这里发现了一个相关的错误,并使用了使用jvm选项的建议解决方法,尽管它有效,但这个错误仍然让我感到困惑。-XX:-UseSplitVerifier

有谁知道为什么会发生这种情况以及为什么解决方法...工程?

--注意--

该项目使用 JDK 6 编译良好。


答案 1

Bug 353467谈到“用于激活旧的验证程序”。
这与 JDK TM 6 采用指南一致,该指南将该选项描述为:-XX:-UseSplitVerifier

传统的验证器可以强制使用标志。-XX:-UseSplitVerifier

版本类文件的属性缺失或不正确可能会导致异常。
重写版本类文件中的字节码且未正确更新 的工具可能无法验证和触发异常。StackMapTable50.0VerifyError50.0StackMapTable

因此,2011-10-03的评论确实指出:

AspectJ 现在自动激活以前可选的设置,以创建堆栈映射(如果类是 Java7)。


答案 2

当我遇到这个问题时,我通过从项目中删除我的JDK 1.7系统库来修复它,并添加了1.6 JDK库。我再次运行该项目,但我没有收到错误。当我再次添加JDK 1.7库时,它仍然有效,因此“交换”中的某些内容使其工作。


推荐