日々常々

ふつうのプログラマがあたりまえにしたいこと。

JaCoCoとMavenと何か

JaCoCoMavenカバレッジを取ろうってやつ。

  • Java: 1.8.0_102
  • Maven: 3.3.9
  • JaCoCo: 0.7.6.201602180812

いろいろ地味に古いけど気にしない。

普通の手順

設定

丁寧な解説ありますけど、もっと雑なの。

pom.xmlproject/build/pluginsに入れるだけ。

<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>0.7.6.201602180812</version>
</plugin>

別に入れなくてもいいけど、このくらいは書いた方が楽。

実行

mvn clean jacoco:prepare-agent test

面倒ならexecutionに書く。手順は公式の丁寧な解説を参照。

結果を見る

HTMLで手元で見たいなら jacoco:report を実行する。 そしたら target/site/jacoco/index.xml ができる。

Jenkinsにはjacoco.execを直接見てもらえば、jacoco:reportは不要。

うまくいかない

testフェーズを実行してもjacoco.execができなくて、jacoco:reportしてたらこんなのが出てたりするとき。

[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:report (default-report) @ xxxxxxxxxxxxxx ---
[INFO] Skipping JaCoCo execution due to missing execution data file:/xxxxxxxxxxxxxx/target/jacoco.exec

たぶんmaven-surefire-pluginになんか設定入ってる。

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.19.1</version>
  <configuration>
    <argLine>-Xms128m</argLine>
  </configuration>
</plugin>

こっちで書いてると、jacoco:prepare-agentで設定したargLineが上書きされてしまう。 なので@{argLine}で参照しておく。

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.19.1</version>
  <configuration>
    <argLine>@{argLine} -Xms128m</argLine>
  </configuration>
</plugin>

だいたいはjacoco:prepare-agentのドキュメントとかに書いてたりするのだけれどね。