Apache Builder を使用してビルドを作成しようとすると、以下のリンクに記載されているのとまったく同じ問題に直面しています。
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 VM オプションを使用して、この問題を回避する方法を提供しています。
アパッチビルダー:
ENV['JAVA_OPTS'] ||= "-XX:UseSplitVerifier"
また
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>
グラドルの場合:
test
{
jvmArgs
"-XX:-UseSplitVerifier"
.....