Java 7 with emma and junit causing java.lang.VerifyError and Illegal local variable Errors

偶尔善良 提交于 2019-12-20 18:22:55

问题


So I'm getting these errors

[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

And I would like to know how I can fix it...

What I've Read:

  • Java 7 JVM VerifyError in Eclipse
  • Testng, Emma, Cobertura, coverage and JDK 7 result in ClassFormatError and VerifyError
  • EMMA code coverage
  • Using EMMA with ANT for JUnit test coverage reporting
  • Bug 141252 - 1.6 compiler ClassFormatError: Illegal class name "" in class file (FIXED)
  • 3.2. : instrumenting Java classes on-the-fly

What I've Done:

Resources:

  • build.xml (will expire in 24 hours)
  • build.xml output (will expire in 24 hours)
  • Ant diagnostics report (will expire in 24 hours)
  • previous question
  • maven-emma-plugin-0.6.jar
  • emma.jar and emma_ant.jar

For some really crazy reason the JUnit Passes on target="test" but fails on target="emmatest".

This is the output on command prompt from 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)

I've tried setting the default arguments for my java7 JRE to -XX:-UseSplitVerifier from here


(source: iforce.co.nz)

I've also tried to make it complaint with JDK 1.6 on the Project Properties.


(source: iforce.co.nz)

JUnit direct testing results (no errors on the trace)


(source: iforce.co.nz)

I'm out of options, please help! :(


回答1:


Sounds strange.

First, check your code to see if you have used new grammar features introduced in JDK 1.7, like try-with-resource or diamond operator.

I met this VerifyError before, when using cobertura. However, when I set -XX:-UseSplitVerifier to the junit task, it is resolved. I set it by specifying a <jvmarg> nested element to junit task.

Also, most of the coverage libs seem to support JDK1.7 very poorly. However, Jacoco works fine with JDK1.7 so I am using it for now.




回答2:


-XX:-UseSplitVerifier

Does work for me and I did not have to downgrade JRE from 1.7 to 1.6



来源:https://stackoverflow.com/questions/12173420/java-7-with-emma-and-junit-causing-java-lang-verifyerror-and-illegal-local-varia

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!