Java 7 结合 emma 和 junit 使用时出现 java.lang.VerifyError 和非法本地变量错误

13
我正在遇到以下错误:
[junit] Illegal local variable table length 17 in method test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest.()V [junit] java.lang.VerifyError: Expecting a stackmap frame at branch target 11 in method test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.StressTest.()V at offset 4 [junit] java.lang.ClassFormatError: Illegal local variable table length 17 in method test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest.()V
我想知道如何解决这个问题...
我已经阅读了以下内容:

我所做的:

资源:

对于某些非常奇怪的原因,JUnit 在 target="test" 上通过,但在 target="emmatest" 上失败。
这是从 java -version 命令提示符输出的内容。
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)

我尝试将我的java7 JRE的默认参数设置为-XX:-UseSplitVerifier,来自here

arguments
(来源:iforce.co.nz)

我还尝试使其与JDK 1.6项目属性中兼容。

complaint
(来源:iforce.co.nz)

JUnit直接测试结果(跟踪中没有错误)

junit
(来源:iforce.co.nz

我已经没有选择了,请帮帮我!:(

2个回答

7

听起来很奇怪。

首先,检查您的代码是否使用了JDK 1.7引入的新语法特性,例如try-with-resourcediamond operator

我之前遇到过这个VerifyError,当时使用cobertura。但是,当我将-XX:-UseSplitVerifier设置为junit任务时,问题得到了解决。我通过为junit任务指定一个嵌套元素<jvmarg>来设置它。

此外,大多数覆盖率库似乎对JDK1.7支持非常差。然而,Jacoco在JDK1.7上运行良好,所以我现在正在使用它。


谢谢,我成功修复了它,只需下载JDK6u25并在我的项目/Eclipse中更改库路径即可。 - classicjonesynz
@Killrawr 很高兴看到这个!是的,降低JDK版本也是一个选择。 - Dante WWWW
1
@Killrawr,最终你按照我的建议降级到Java6版本,成功摆脱了这个问题 :)。 - Bharat Sinha
@SiB 你能否看一下这个问题:basic.xml is not in either pmd-bin-5.0-alpha or pmd-bin-5.0.0 directories - classicjonesynz
感谢您的指示:Cobertura 在我的情况下也是根本原因。 - bentolor

1

-XX:-UseSplitVerifier

对我有用,我不需要将JRE1.7降级到1.6


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接