Jacocoでレポートがファイルが出力されない。

NetBeansのプラグインで、Javaのテストカバレッジ取得ツールである「Jacoco」のプラグインをインストールした。
が!全然結果が出力されない。
色々調べたころ、
Mavenでテスト実行のための設定「maven-surefire-plugin」で、明示的にjacocoのレポート出力機能を呼び出すように記載を追加することで解決した。
※ほか人のサイトや、本サイトのサンプル見ても、そもそも「maven-surefire-plugin」のところは書いていなかったり、書いてあってもその設定なかったりするが・・・

テスト実行後に、プロジェクトを右クリック→コードカバレッジ→レポートを表示でレポート画面を開いても「テスト実行した?」というメッセージが出力される。
レポート画面の「全てのテストを実行」で実行しても同じ。
Jacocoを最新バージョン(この時は、0.7.7.201606060606)

色々調べてみたところ、プラグイン自体は、結果ファイルを読み込んで表示するだけのようで、あとやってくれるのはインストール時にMavenのBuildプラグインにJacocoの設定を追加するくらい。
他の利用者のサイトを見るとそれだけで動いているように見えるんですが・・・
とりあえず、何か設定が足りないんだろうと思い、テストを何度も実行しながらコンソールを確認。

するとreportのところで
「Skipping JaCoCo execution due to missing execution data file」
というメッセージを発見。どうやらレポート作成しようとして、結果ファイルが見つからない=出力されていないということが判明。
でも、prepeare-agentのところでは
jacocoArgs set to -javaagent:C:/XXX\\0.7.7.201606060606\\org.jacoco.agent-0.7.7.201606060606-runtime.jar=destfile=C:XXXXXXX\\target\\coverage-reports\\jacoco-unit.exec
となっていて、設定はちゃんとできていそう。
じゃあそもそも実行されていないのかと思い、ググってみると、
「maven-surefire-plugin」の引数にjavacocoの呼び出し設定?のようなものを追加しているものがあったので真似してみた。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
 <version>2.16</version>
 <configuration>
 <argLine>${jacocoArgs} -Dfile.encoding=UTF-8</argLine>
</configuration>
 </plugin></pre>
<pre><!--カバレッジ用に追加-->
 <plugin>
 <groupId>org.jacoco</groupId>
 <artifactId>jacoco-maven-plugin</artifactId>
 <version>0.7.7.201606060606</version>
 <executions>
 <execution>
 <id>default-prepare-agent</id>
 <phase>test-compile</phase>
 <goals>
 <goal>prepare-agent</goal>
 </goals>
 <configuration>
 <propertyName>jacocoArgs</propertyName>
 <includes>
 <include>*</include>
 </includes>
 <destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
 </configuration>
 </execution>
 <execution>
 <id>default-report</id>
 <phase>prepare-package</phase>
 <goals>
 <goal>report</goal>
 </goals>
 <configuration>
 <dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
 </configuration>
 </execution>
 <execution>
 <id>default-check</id>
 <goals>
 <goal>check</goal>
 </goals>
 <configuration>
 <rules>
 <!--implementation is needed only for Maven 2--> 
 <rule implementation="org.jacoco.maven.RuleConfiguration">
 <element>BUNDLE</element>
 <limits>
 <!--implementation is needed only for Maven 2--> 
 <limit implementation="org.jacoco.report.check.Limit">
 <counter>COMPLEXITY</counter>
 <value>COVEREDRATIO</value>
 <!-- コンパイル時に確認する達成率 -->
 <minimum>0.10</minimum>
 </limit>
 </limits>
 </rule>
 </rules>
 <dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
 </configuration>
 </execution>
 </executions>
 </plugin>

上記の設定にすると無事、テスト終了後にレポートが出力されるようになりました。
ちなみに、default-checkというのはビルド時に、カバレッジの最低値を設定することで下回っていた場合にはビルドエラーにしてくれるという
設定。CIと連携したら役に立ってくるかな。

(参考)
mavenの設定内容
http://www.eclemma.org/jacoco/trunk/doc/maven.html

@EJBが効かない?

localで開発していたアプリをlinux状のglassfishで動かそうとしたところ、NullpointerExceptionが発生。

View生成直後に、javax.ejb.Statelessアノテーションをつけたクラスを@EJB
アノテーションをつけたフィールドにインジェクトしたクラスを呼び出そうとしたところで発生した模様。

ほかの個所と比較したところうまくいっているとことは@Injectアノテーションを使用していたので、同じく修正したところ、正常に動作した。

念のためバージョンを調べてみたら、あれ・・・?マイナーバージョンが違っていた・・・

ローカル環境  :  GlassFish Server Open Source Edition  4.1.1  (build 1)
サーバー環境 : GlassFish Server Open Source Edition  4.0  (build 89)

バージョンの違いかもしれない・・・