Tomcatの記事はいくつかあったのですが、GlassFishの記事がなかったのでメモしておきます。
※この記事ではMavenの使い方については言及しません。
Jacoco
JacocoはJavaのコードカバレッジを取得するライブラリです。
大雑把な仕組みはJVM起動時にjacocoのjavaagentをオプションとして指定することにより、コードの実行状況をファイル出力し、その実行状況ファイルを分析することによりカバレッジレポートを出力する仕組みです。
よって、GlassFish起動時にJVMオプションとしてjacoco javaagentを渡すことができればカバレッジを取得することができます。
JVMオプション引数の準備
まずGlassFish起動時に渡すJVMオプション引数を準備します。
jacoco-maven-pluginを設定します。
POM.xmlのサンプルは下記のような感じです。
${jacoco.datafile}には実行ファイルの出力先パスを設定して下さい。
${jacoco.include.package}には実行ファイルに含めるパッケージ名を設定して下さい。
(ワイルドカード使用可。階層区切りはスラッシュ。jp/co/** など)
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
<executions>
<execution>
<!-- JVMに渡す引数を用意する -->
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>jacocoArgs</propertyName>
<includes>
<include>${jacoco.include.package}</include>
</includes>
<destFile>${jacoco.datafile}</destFile>
</configuration>
</execution>
<execution>
<!-- 実行結果ファイルを読んでレポートを生成する -->
<id>default-report</id>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${jacoco.datafile}</dataFile>
<includes>
<include>${jacoco.include.package}</include>
</includes>
</configuration>
</execution>
<execution>
<!-- マージした実行結果ファイルを読んでレポートを生成する -->
<id>merged-report</id>
<phase>none</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${project.build.directory}/merged.exec</dataFile>
<includes>
<include>${jacoco.include.package}</include>
</includes>
<outputDirectory>${project.reporting.outputDirectory}/jacoco_merged</outputDirectory>
</configuration>
</execution>
<execution>
<!-- 複数の実行結果ファイルをマージする -->
<id>merge-results</id>
<phase>none</phase>
<goals>
<goal>merge</goal>
</goals>
<configuration>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<includes>
<include>*.exec</include>
</includes>
</fileSet>
</fileSets>
<destFile>${project.build.directory}/merged.exec</destFile>
</configuration>
</execution>
</executions>
</plugin>
これで
mvn jacoco:prepare-agent@prepare-agent
を実行すると、コンソールログにjvm引数が表示されます。
-javaagent:
で始まるやつです。
これをコピーしてどこかに保管しておきます。
GlassFishのJVMオプション設定
さて、GlassFishのJVMオプションはどこで設定するかというと
glassfish\domains\ドメイン名\config\domain.xml
の中に設定があります。
のが並んでいるあたりにで囲って先ほど保管した引数を追加します。
<server-config>
...
<java-config>
...
<jvm-options>-javaagent: ... </jvm-options>
</java-config>
...
</server-config>
これを追加した上でGlassFishを起動してWebアプリの操作を行うと、実行状況ファイルがJVMオプション引数で指定したパスに出力されます。
注意点としては、GlassFishをコマンドで正常終了させないと実行状況が出力されません。
asadmin stop-domain
で停止させて下さい。
カバレッジレポート作成
上記のPOMのサンプル通りに設定すると
mvn jacoco:report@default-report
でレポートが作成できます。