Eclipse中的Java 7 JVM验证错误
当我使用JDK 7在EclipseIndigo中编译项目时,会出现以下错误对话框 使用以下堆栈跟踪Eclipse中的Java 7 JVM验证错误,java,eclipse,jvm,java-7,Java,Eclipse,Jvm,Java 7,当我使用JDK 7在EclipseIndigo中编译项目时,会出现以下错误对话框 使用以下堆栈跟踪 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.C
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)
我发现了一个相关的bug,并使用了建议的使用jvm选项的解决方法-XX:-UseSplitVerifier
,尽管它可以工作,但这个bug仍然让我感到困惑
有人知道为什么会发生这种情况,以及为什么解决方法……有效吗
--注--
该项目使用JDK 6编译得很好。谈到“使用-XX:-使用SplitVerifier
激活旧的验证器”。这与将该选项描述为: 可以使用
-XX:-UseSplitVerifier
标志强制使用传统验证器
版本50.0
类文件的StackMapTable
属性缺失或不正确会导致VerifyError
异常。在
50.0版
类文件中重写字节码且未正确更新堆栈映射表
的工具可能无法验证并触发异常
因此,报告确实指出:
如果类是Java7,AspectJ现在会自动激活以前的可选设置来创建stackmaps
当我遇到这个问题时,我通过从项目中删除JDK1.7系统库来修复它,并添加了1.6JDK库。我又开始运行这个项目了,但没有发现错误。当我再次在中添加JDK 1.7库时,它仍然有效,因此“交换”中的某些内容使其有效。我在Juno中遇到了这个问题,但通过从4.2更新站点安装最新的4.2版本解决了它: 这与@VonC一年前给出的相同——但由于更新的AspectJ现在已经存在(但不是在最新的Juno存储库中,也不是Spring附带的),它现在构成了一个答案 但要归功于@VonC
请注意,这应该适用于3.8和4.2。目前,我的环境是JDK1.7(j2sdk 1.7更新21)和Eclipse4.2Juno(SR2) 我也有同样的问题,所以我通过配置VM参数选项'-XX:-UseSplitVerifier'修复了它 但当我部署基于谷歌应用程序引擎的产品时,遇到了很大的麻烦
最后,我更改了java 6(更新43)“已修复。如果类为Java7,AspectJ现在会自动激活以前的可选设置以创建堆栈映射。如果仍然存在问题,请重新打开。”…因此我猜这仍然是一个问题?@mre:在当前的Eclipse版本中,这可能仍然是一个问题。但是它应该在当前的3.8M3/4.2M3版本中修复。谢谢,我将尝试该版本。我无法验证该版本是否修复了该问题,因为Eclipse3.8没有AspectJ开发工具。://@mre当然你可以通过中列出的更新站点之一添加AspectJ作为插件?我也遇到了同样的情况!这是一个解决问题的办法!