Lombokで生成されたメソッドをJacocoのカバレッジから除外する

Jacocoの0.8.0が2018年1月2日にリリースされ、待ち焦がれていたLombokで生成されたメソッドを除外する機能がはいりました。

  • JaCoCo - Change History

    Methods annotated with @lombok.Generated to better integrate with Lombok >= 1.16.14. Initial analysis and contribution by Rüdiger zu Dohna (GitHub #513).

なお、他にも様々なフィルタが実装(または実装予定)されています。

こういった機能を使うことによって、必要な範囲に絞ったカバレッジが把握しやすくなると思います。

除外方法

Jacoco側では、@lombok.Generatedが付いているメソッドを一律対象外にするといった実装となっており、Jacoco側で何か設定で切り替えるといったものではありませんでした。

@lombok.Generatedは、Lombokの設定lombok.configで付与することになります。デフォルトでは付与されません。 lombok.addLombokGeneratedAnnotation = trueを設定することによって付与されるようになります。

まとめると、、除外のために下記の2つが必要になります。

  • Jacocoのバージョンを 0.8.0 以上にする
  • lombok.configlombok.addLombokGeneratedAnnotation = trueを設定する

Gradleでの設定例

Gradleプロジェクトで試してみました。コードは一式は下記にあります。

GradleでJacocoを使う場合には、build.gradleapply plugin: 'jacoco'を指定するだけですが、2018年1月6日時点だとバージョン0.7.6が使われてしまうので、明示的にJacocoのバージョンを指定する必要があります。

apply plugin: 'java'
apply plugin: 'jacoco'

repositories { jcenter() }

dependencies {
    compileOnly 'org.projectlombok:lombok:1.16.18'
    testCompile 'junit:junit:4.12'
    testCompile 'org.assertj:assertj-core:3.9.0'
}

jacoco {
    toolVersion = "0.8.0"
}

lombok.configは下記のように記載します。config.stopBubbling = trueはプロジェクトのルートであることをLombokに教えるための設定です。(これ以上親ディレクトリを辿って設定ファイルを探さないように)

config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true

これで無事除外されました。