Java 7 с emma и junit вызывает java.lang.VerifyError и нелегальную локальную переменную Ошибки
Итак, я получаю эти ошибки
[junit] Недопустимая длина таблицы локальных переменных 17 в методе test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest.() V
[junit] java.lang.VerifyError: Ожидание фрейма стековой карты в целевой ветки 11 в методе test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.StressTest.() V со смещением 4
[junit] java.lang.ClassFormatError: Недопустимая длина таблицы локальных переменных 17 в методе 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
из здесь
![arguments]()
(источник: iforce.co.nz)
Я также пытался подать жалобу с JDK 1.6
на Project Properties
.
![complaint]()
(источник: iforce.co.nz)
Результаты прямого тестирования JUnit (без ошибок на трассировке)
![junit]()
(источник: iforce.co.nz)
У меня нет вариантов, пожалуйста, помогите! :(
Ответы
Ответ 1
Звучит странно.
Сначала проверьте код, чтобы узнать, были ли вы использованы новые функции грамматики, представленные в JDK 1.7, например try-with-resource
или diamond operator
.
Я встретил этот VerifyError раньше, когда использую cobertura. Однако, когда я устанавливаю -XX:-UseSplitVerifier
в задачу junit
, он разрешен. Я установил его, указав <jvmarg>
вложенный элемент в задачу junit
.
Кроме того, большинство библиотек покрытия, похоже, очень плохо поддерживают JDK1.7. Однако Jacoco отлично работает с JDK1.7, поэтому я использую его сейчас.
Ответ 2
-XX:-UseSplitVerifier
Работает ли для меня и мне не нужно понижать JRE от 1.7 до 1.6