MavenマルチモジュールプロジェクトでJacocoを使ってカバレッジをまとめて集計
この記事では複数のモジュールから構成されるMavenプロジェクトで、Jacocoを用いテストカバレッジをまとめて集計する方法を紹介します。
Jacocoでカバレッジを取得する
JacocoとはJavaのテストカバレッジ集計ツールです。Mavenプロジェクトの構成が単体のモジュールからなる場合、pom.xml
へJacocoプラグインを設定するだけでカバレッジの集計を行ってくれます。おおまかにはjacoco:prepare-agent
でjacoco.exec
という実行ファイルを生成、jacoco:report
ではこの実行ファイルを用いて集計結果をhtmlなどで生成するという流れです。
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.4</version> <executions> <!--実行ファイル jacoco.execの生成--> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <!--execファイルからレポートを生成--> <execution> <id>report</id> <phase>prepare-package</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin>
マルチモジュールプロジェクトでまとめてカバレッジ集計
マルチモジュールのMavenプロジェクトの場合、前項の設定を各モジュールの子pomで設定すると、出力されるレポートが各モジュールに散らばってしまうという問題があります。ここではマルチモジュールの構成として、以下のようなプロジェクトを考えます。
parent/ ┣ pom.xml ┣ child1/pom.xml ┗ child2/pom.xml
子pomの設定
各子pomに以下の設定を追加します。jacoco:prepare-agent
により各子モジュールの target/
以下に jacoco.exec
を生成します。シングルモジュールプロジェクトの際に設定していたjacoco:report
がないことに注意してください。これはレポート出力を親pomで一括で実行するためです。
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.4</version> <executions> <!--実行ファイル jacoco.execの生成--> <!--子ではまだレポートは生成しない--> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> </executions> </plugin>
親pomの設定
次に親pomの設定を行います。親pomでは子pomで生成した *.exec の実行ファイルからレポートを出力します。dependency
内のgroupId
, artifactId
, version
は子pomで設定している値を入力し、各子モジュールを指定します。これにより、各子で生成したjacoco.execを参照することが可能となります。
次に子で実行していなかった jacoco:report
に対応するコマンドの設定を親pomで行います。
親pomでは jacoco:report
に代わり、jacoco:report-aggregate
を設定することで、プロジェクト全体のカバレッジレポートをまとめて集計することができます。
<dependencies> <!--child1 の pom.xmlの設定を入力--> <dependency> <groupId>com.chari_ngo.sample</groupId> <artifactId>child1</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <!--child2 の pom.xmlの設定を入力--> <dependency> <groupId>com.chari_ngo.sample</groupId> <artifactId>child2</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> </dependencies> <!--各モジュールのexecファイルから統合されたレポートを生成--> <build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.4</version> <executions> <execution> <id>report-aggregate</id> <phase>prepare-package</phase> <goals> <goal>report-aggregate</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
カバレッジの出力
pomの設定が完了したら、mvnコマンドを実行することでカバレッジを集計することができます。 parent/target/site/jacoco-aggregate
にhtmlファイルとしてカバレッジレポートが生成されます。
$ mvn clean test jacoco:report-aggregate