Я переключился на новейшую версию JDK 7, и у меня возникли проблемы с запуском модульного теста testng для байтового кода, который запускается с помощью инструмента покрытия emma. Ни один из моих тестовых примеров не запускается правильно, и для большинства из них я получаю такие ошибки.
java.lang.ClassFormatError: Illegal local variable table length 10 in method measurement.meter.AbstractSerialPortMeter.(Lmeasurement/meter/SerialPort;)V at measurement.meter.Elc3133aTest.setUp(Elc3133aTest.java:42)
Я нашел здесь статью JSR 292 Goodness Fast Code Coverage Tool Less 10k , в котором говорится, что «JSR 292 представляет новую инструкцию invokedynamic байт-кода, но также несколько новых типов констант пула констант. Это означает, что большинство инструментов, которые анализируют байт-коды, такие как ASM, BCEL, findbugs или EMMA, должны быть обновлены до java 7 совместимы. "
Проверял домашнюю страницу Эммы, но похоже, что она давно не обновлялась.
Кто-нибудь решил подобную проблему?
Я также пробовал с Cobertura. Кажется, это работает немного лучше, но я получаю много исключений типа VerifyError
.
java.lang.VerifyError: Expecting a stackmap frame at branch target 85 in method measurement.meter.AbstractSerialPortMeter.close()V at offset 26
at measurement.meter.AbstractSerialPortMeterTest.setUp(AbstractSerialPortMeterTest.java:27)
Java 8 + эквивалентный из ответа Pedro Ballesteros:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<argLine>-noverify</argLine>
</configuration>
</plugin>
(Настраивают номер версии для соответствия версии Безошибочных, которые Вы используете.)