【发布时间】:2012-10-08 02:34:17
【问题描述】:
当我在 Eclipse 中使用 JDK7 或 JDK6 编译和运行我的项目时,一切都很好。然而,在我使用 ANT 构建它然后尝试使用系统 JDK7 运行它之后,我得到了错误:
方法 myClass.myMethod() [[Ljava/lang/Object; 中分支目标 25 处的堆栈图帧不一致;在偏移 14
我到处寻找,在 StackOverFlow 上发现了几个很好的问题:
- Java 7 JVM VerifyError in Eclipse
- Akka Actors fails, VerifyError: Inconsistent stackmap frames at branch target
两者基本上都建议添加 -XX:-UseSplitVerifier 作为 JVM 选项,它确实解决了这个问题。我仍然不完全明白为什么,但显然 this bug report 应该会有所帮助。可惜我还是不明白...
我确实注意到有人在使用面向方面的编程的问题之一,这让我认为我正在使用Guice(Google 的 DI 框架),这可能会导致问题,但我不知道如何。假设支持JDK7。
我也在使用 Proguard,但这也应该适用于 JDK7。
无论如何,在这一点上,我不知道为什么这种解决方法有效,除了它基本上回退到以前的 JDK(在本例中为 JDK6)版本时,当代码的某些部分试图使用字节码(即为什么我认为它与 DI) 代码有关。但我仍然无法建立正确的链接。而且我也可能会离开!
如果有人能解释发生了什么或为什么会发生这种情况,我将非常感激。此外,我真的很讨厌不得不使用解决方法,因为这不是我认为的长期解决方案。
【问题讨论】:
-
" 假设支持 JDK7。" - 也许它的支持是错误的。您是否搜索过 Guice 问题跟踪器/组/列表?
-
在他们的问题跟踪器中找不到任何关于错误的信息
-
我的猜测是,在 java7 中,他们添加了更积极的字节码验证检查,并且任何使用字节码进行依赖注入的 guice 都不适用于这些检查
-
当你说你用ant构建时,你是从eclipse运行ant吗?它也可能是 Eclipse 编译器中的错误,如果是这样,请尝试使用纯 javac 或从 NetBeans 构建此代码。
-
问题是它在 Eclipse 中工作,而不是在纯 jvm 中工作。我也使用 proguard 并认为这可能是问题的一部分,但这也应该支持 JDK7
标签: java dependency-injection guice proguard java-7