带有emma和junit的Java 7导致java.lang.VerifyError和非法局部变量错误

时间:2012-08-29 08:09:20

标签: eclipse ant java-7 emma

所以我收到了这些错误

  

[junit]方法test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest。()V

中的非法局部变量表长度17      

[junit] java.lang.VerifyError:在方法test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.StressTest。()V中偏移4处的分支目标11处期望堆栈图帧

     

[junit] java.lang.ClassFormatError:方法test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest。()V

中的非法局部变量表长度17

我想知道如何解决它......

我读过的内容:

我做了什么:

资源:

由于一些非常疯狂的原因,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的默认参数设为here

-XX:-UseSplitVerifier

arguments http://iforce.co.nz/i/dvsh1eoc.n0m.png

我还试图通过JDK 1.6上的Project Properties投诉。

complaint http://iforce.co.nz/i/4jxuj4eb.rae.png

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

junit http://iforce.co.nz/i/wicrvpsi.5gw.png

我没有选择,请帮忙! :(

2 个答案:

答案 0 :(得分:7)

听起来很奇怪。

首先,检查您的代码,看看您是否使用了JDK 1.7中引入的新语法功能,如try-with-resourcediamond operator

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

此外,大多数覆盖库似乎都支持JDK1.7非常糟糕。但是, Jacoco 可以正常使用JDK1.7,所以我现在正在使用它。

答案 1 :(得分:1)

-XX:-UseSplitVerifier

对我有用而且我不必将 JRE 1.7 降级为 1.6