web-dev-qa-db-ja.com

ソナーカバレッジレポートからロンボククラスを除外する

最新Jacocoプラグイン(まだスナップショットバージョン、0.7.10-SNAPSHOT)には、Lombokで生成されたコードを除外するための素晴らしい新機能があります( https://github.com/jacoco/jacoco/wiki/FilteringOptions )。リポジトリのルートにlombok.configファイルを追加するだけで、

lombok.addLombokGeneratedAnnotation=true 

Jacocoレポートを内部で生成すると、違いがわかります。ただし、私の通常の品質ジョブを実行して結果をSonarに公開すると、異なる(つまり、より悪い)結果が得られます。

ローカルレポートとソナーで同じ結果にならないのはなぜですか?回避策はありますか?

11
Vincent F

ここで言及したように: https://github.com/jacoco/jacoco/pull/513#issuecomment-293176354

フィルタリングは、実行情報の収集時(execファイルの作成時)ではなく、レポート生成時(html、xmlなどの作成時)に実行されます。そのため、xmlの読み取りの代わりに実行データを直接読み取るツール(これは、純粋な内部中間形式に依存するという側のミスの一種ですが、行われることは行われます)と独自のレポート(SonarQube、Jenkinsなど)を作成します)レポートのフィルタリングを取得するために、リリースされたらJaCoCoへの依存関係を更新する必要があります。リリースが完了すると、これについて下流のプロジェクト(特に上記のすべて)に明示的に通知します。したがって、もう一度-しばらくお待ちください。よろしくお願いします。

ソナーがexecファイルの代わりに最終レポートを読み取る方法が見つからなかったので、我慢して、公式の0.7.10 jacocoプラグインのリリースを待ってから、ソナー側の更新を待つ必要があると思います。

------ 2018年5月9日更新

新しいバージョンがリリースされました、そして私はそれが私のために働くことを確認できます。

使用:

  • ソナー6.7
  • SonarJavaプラグイン5.1.1.13214
  • jacoco mavenプラグイン0.8.1
  • lombok.config内のlombok.addLombokGeneratedAnnotation = true

Lombokで生成されたコードが無視されるようになったため、Sonarに報告されるカバレッジ結果が大幅に向上しました。 「実際の」カバーされていない領域が何であるか、そしてそれが危険かどうかを識別するのに本当に役立ちます。

12
Vincent F

最初に、ロンボクのバージョンが少なくとも1.16.14であることを確認する必要があります

pom.xml

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
    <version>1.16.14</version>
</dependency>

次に、Jacocoのバージョンが少なくとも.8.であることを確認する必要があります

pom.xml

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.0</version>
    <!-- // -->
</plugin>

次に、プロジェクトのsrcフォルダーにlombok.configファイルを追加する必要があります(resourcesフォルダーではない

lombok.config

# tells Lombok that this is the root directory and that it shouldn’t search parent directories for more configuration files
config.stopBubbling = true
# tells Lombok to add @lombok.Generated annotation to all generated methods
lombok.addLombokGeneratedAnnotation = true
0
veben