问题
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