Я столкнулся с той же проблемой, упомянутой в приведенной ниже ссылке, при попытке создать сборку с использованием Apache Buildr.
Testng, Emma, Cobertura, покрытие и JDK 7 приводит к ошибкам ClassFormatError и VerifyError
Я попытался использовать параметр -XX:-UseSplitVerifier (как показано ниже) при тестировании артефактов, но это не решает мою проблему.
test.using( :java_args => ['-ea','-XX:-UseSplitVerifier'])
Ошибка:
Instrumenting classes with emma metadata file /test-client/reports/emma/coverage.em
JavaTestFilter: Unable to load class com.test.activemq.QueueConsumerTest to determine testing ability
Обновление – решение/основная причина...
Код, скомпилированный с использованием Java 1.7, требует инструкций фрейма карты стека. Если вы хотите изменить файлы классов Java 1.7, вам нужно использовать ClassWriter.COMPUTE_FRAMES или MethodVisit.visitFrame().
java.lang.VerifyError — Java 7 и Cobertura
Я только что добавил Cobertura в проект Java 7 и был разочарован тем, что мои модульные тесты начали давать сбой:
java.lang.VerifyError: Expecting a stackmap frame at branch target blah...
Похоже, инструментарий байт-кода cobertura не совместим с Java 7. Java 7 изменила формат класса с добавлением карты стека, используемой для проверки, и cobertura еще не догнала... Похоже, они обновили код и зафиксировали это освоить сейчас..
https://github.com/cobertura/cobertura/pull/6
Как исправить эту ошибку?
Oracle предлагает способ обойти эту проблему, используя параметр виртуальной машины -XX:UseSplitVerifier.
Сборщик Apache:
ENV['JAVA_OPTS'] ||= "-XX:UseSplitVerifier"
OR
ENV['JAVA_OPTS'] ||= "-Xverify:none"
Для Maven:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<argLine>-XX:-UseSplitVerifier</argLine>
</configuration>
</plugin>
Для Gradle:
test
{
jvmArgs
"-XX:-UseSplitVerifier"
.....