jacoco-report-aggregation を使ってマルチモジュール構成のカバレッジレポートを集める

最近本業で地道に gradle の昔から残ってる名残とかを消していくというのを空き時間でやってる。
gradle 7.4 から入った jacoco-report-aggregation を導入してマルチモジュール構成のカバレッジレポート集計のための古き良き設定を捨てることに成功したのでメモ。

以前までは、例えば、6.5.1の時のドキュメント にも記載の通り、以下のように設定する必要があった。

tasks.register<JacocoReport>("codeCoverageReport") {
    subprojects {
        val subproject = this
        subproject.plugins.withType<JacocoPlugin>().configureEach {
            subproject.tasks.matching({ it.extensions.findByType<JacocoTaskExtension>() != null }).configureEach {
                val testTask = this
                sourceSets(subproject.sourceSets.main.get())
                executionData(testTask)
            }

            subproject.tasks.matching({ it.extensions.findByType<JacocoTaskExtension>() != null }).forEach {
                rootProject.tasks["codeCoverageReport"].dependsOn(it)
            }
        }
    }
}

これに近いものを書いたことがある人は多いと思う。

しかし 7,4以降は以下の記事などにある通り jacoco-report-aggregation を利用することで複数プロジェクトのカバレッジレポート集計が簡単になった。

使い方はというと以下の2つが参考になった。

この設定だけで以下のコマンドで build/reports/jacoco/testCodeCoverageReport/testCodeCoverageReport.xml に集計されたカバレッジレポートが出力される。

./gradlew testCodeCoverageReport

余談

同じようなプラグインとして test-report-aggregation があってテストレポートを1つにマージするのもできるらしいけど、この置き換えをした時点では jacoco-report-aggregation とうまく共存させる方法がわからなかったのでもうちょっと調べたい

The Test Report Aggregation Plugin