5

私は本当にいらいらし始めているエラーに直面しています。
これが私が持っているものです: 1) JaCoCo をカバレッジ ツールとして使用する Sonar 3.5。2) モックを使用してテストを実行するための Jmockit lib。3) Maven で自動化されたビルド プロセス。

したがって、最初に実行すると問題ありませんmvn clean install。次に実行するmvn sonar:sonarと、ここで何が起こっていますか:

  • Jmockit は、必要なクラスをインストルメント化するようです。
  • JaCoCo は、Jmockit によって既に計測されているクラスを計測することはできず、既に計測されているクラスを計測することは不可能であると言って、膨大な量の例外を吐き出します。ただし、ソナーはそのようなシナリオに対して有効な出力を持っているようです。
    最初の質問は、そのような例外をどうにかして抑制することはできますか? CI システムのログ ファイルのサイズが50Mb(!) に達しているため、これは非常に重要です。これは受け入れられません。CI マシンでは、このようなログによって多くの空き領域が消費されます。

私が持っている例外は次のとおりです。

java.lang.instrument.IllegalClassFormatException: Error while instrumenting class app/MyClass.
Caused by: java.lang.IllegalStateException: Class app/MyClass is already instrumented.

そのような例外の抑制が不可能であると仮定して、私はそれを少し調査し、JaCoCo (Sonar が使用するツールと、既にインストルメント化されたクラスをインスツルメントできないツール) がoffline instrumentation(AFAIK Sonar どちらもサポートしていない) ようなモードを持っていることを発見しましたこれoffline instrumentationまたはそのような警告を抑制することができます)。このことは、まさにそのような場合に使用するように設計されています。そこで、Maven で JaCoCo をプラグインとしてセットアップしようとしましたが、JaCoCo が実行ファイルを見つけられないため、これを行うことができませんでした。実行mvn clean installすると、次のエラーがポップアップ表示されます。

[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:report (report) @ webservice-mws --- [INFO] 実行データファイルがないため、JaCoCo の実行をスキップしています

私が間違っていなければ、この実行ファイルは JaCoCo プラグインの RESULT です。私は完全にイライラしており、これをどうしたらよいかわかりません。

誰かがそれで私を助けることができれば、それは大歓迎です!
前もって感謝します!

JaCoCo プラグインの pom.xml 設定:

             <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.6.2.201302030002</version>
                <executions>
                    <execution>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
4

5 に答える 5

4

Sonar 3.5.1 のコード カバレッジとして Cobertura を使用できます。

変更するには:

  1. 管理者としてログイン
  2. [設定] > [構成] に移動します
  3. 一般設定カテゴリ > Java
  4. コード カバレッジ プラグイン = cobertura を設定します。

私のプロジェクトで魅力的に働きました^_-

于 2013-06-05T23:52:16.370 に答える
1

私も同じ問題を抱えていました。jacoco プラグイン 0.7.1+ で修正されたようです。私は 0.7.3.201502191951 を使用していますが、問題は解決しました。

基本的に、jMockit エージェントはクラスをロードし、JaCoCo エージェントがそれらを見る前にそれらを再変換します。その後、JaCoCo は必要なインストルメンテーションを実行できなくなります。このリンクを参照してください

https://github.com/jacoco/jacoco/issues/208

于 2015-02-26T18:44:19.383 に答える