LoginSignup
1
1

More than 3 years have passed since last update.

アプリケーション・サーバーでJaCoCoカバレッジを取得する

Last updated at Posted at 2021-03-01

モチベーション

よくわからないJavaアプリケーションの実装を理解するために、とりあえず動かしてみながらソースコードのどこを通っているのかざっくり理解したいときってないでしょうか。そんなときカバレッジを取得しながら動かしてみると、調査が捗るかもしれません。OpenLiberty, Mavenを使った場合の例です。

方法

1.アプリケーションのコンパイルをする時にはデバッグ情報を含めるようにします。Mavenを利用する場合は以下のように設定します

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
  <configuration>
    <source>8</source>
    <target>8</target>
    <debug>true</debug>
    <debuglevel>lines,vars,source</debuglevel>
  </configuration>
</plugin>

2.https://www.jacoco.org/jacoco/ から入手したzipを入手してjarを展開すると出てくるjacocoagent.jarを-javaagentオプションで実行時に以下のオプションを指定します。Libertyの場合はjvm.optionsに記載します

-javaagent:/適当なパス/jacocoagent.jar

3.アプリケーションを手動で実行します。Libertyの場合はuser/servers/defaultServerなどサーバーのディレクトリにjacoco.execが出力されます

4.生成されたjacoco.execを使ってレポートを生成します。--classfilesにはwarファイルを直接指定しても良いようです。--sourcefilesはsource.jarでなくソースコードが存在するディレクトリを指定します(このオプション自体を複数回指定可能)。ソースコードの文字コードを指定したい場合は、--encoding UTF-8のように指定します。

java -jar jacococli.jar report jacoco.exec \
  --classfiles myapplication.war \
  --sourcefiles src/main/java --html jacocoreport --csv jacocoreport.csv

レポート生成時に警告が出力される

コンパイル、アプリケーション実行、レポートの生成に別のバージョンのJavaを使うと以下のような警告が出力されることがあります。またJPAエンティティのように実行時に書き換えられるようなクラスファイルはどうしても警告が出力されてしまうようです。
https://www.jacoco.org/jacoco/trunk/doc/faq.html

[WARN] Some classes do not match with execution data.
[WARN] For report generation the same class files must be used as at runtime.
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1