4

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"

.....

4

1 に答える 1

3

Builder は組み込み JVM (通常、JRuby を使用しない場合は Ruby-Java Bridge (RJB) を使用) を実行し、その JVM 内からテスト選択を実行するため、起動前に JAVA_OPTIONS を介して検証無効化オプションを渡すこともお勧めしますbuildr

$ export JAVA_OPTIONS="-Xverify:none"  # or other verification-disabling options
于 2013-06-03T22:09:57.603 に答える