NetBeansのMavenプロジェクトでJMockit
JMockitを使って実クラスの振る舞いを弄るにはVM引数に以下の設定を追加する必要がある訳で、
-javaagent:/(path-to-jmockit.jar)/jmockit.jar
- プロジェクトを右クリックしてコンテキストメニューを表示
- プロパティをクリック
- 実行をクリック
して表示されるVMオプションに設定すればいい訳ですが、Mavenプロジェクトではそうはいかないようです。と、いうかMavenのWebプロジェクトではそもそも「VM引数」なんてものすら見つかりません。
ではどうすればいいのか。
悩みました。
そもそも、NetBeansのMaveプロジェクトのビルドプロセスはmavenと完全に統合されているようです。それはもう、例えて言うなら、通常のNetBeansプロジェクトのビルドプロセスがantと完全に統合されているが如しです。即ち、NetBeansのMavenプロジェクトでは、ビルドするにしても実行するにしてもデバッグするにしてもテストコードを実行するにしても、何をするにしても全てmavenを通して動くようです。当然、テストクラスを右クリックして「ファイルを実行」としても、mavenが起動されてmavenのjunit用プラグインを通して選択中のテストクラス1つだけが実行されます。
即ち
VM引数も、NetBeansに対してでは無く、mavenに対して設定しなければならんようです。加えて、mavenはどうもテストケースは設定次第ではmaven本体とは別VMを立ち上げて実行したりとかするらしいので、環境変数「MAVEN_OPTS」とかに設定しても駄目みたいです(というか、デフォルト設定ではNetBeansはNetBeansに組み込まれているmavenを使うみたいなので、環境変数が効果あるのかどうかも微妙です)。
即ち、pom.xmlに以下の設定を追加しなければならないみたいです。
<build> (略) <plugins> (略) <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-javaagent:/(path-to-jmockit.jar)/jmockit.jar</argLine> </configuration> </plugin> (略) </plugins> (略) </build>
むむむ。
色々と奥が深いな、NetBeansは。ちなみに、
- プロジェクトを右クリックしてコンテキストメニューを表示
- プロパティをクリック
- アクションをクリック
- 「カスタムの追加をクリック」
して、カスタムのアクション名を日本語にすると文字化けするのですが、これもSVNのコミットコメント同様Shift-JISが絡んでたりするのかしら。やっぱ、NetBeansは文字コードがびみょry。
ちなみに、実はMavenプロジェクトだけでは無く通常のNetBeansのWebプロジェクトにもVM引数を設定する個所は見つからなかったりするのですが、正直何処で設定すればいいのか分かりません。Javaプロジェクト同様、
nbproject/project.properties
に、
run.jvmargs=-javaagent:/(path-to-jmockit.jar)/jmockit.jar
と設定するか、あるいは
runmain.jvmargs=-javaagent:/(path-to-jmockit.jar)/jmockit.jar
とか設定すればいいのかなぁと思ったのですが、どうやら違うようです。
むむむ。
まぁ、Mavenプロジェクトで使えれば私的にはそれでいいんですけど、微妙と言えば微妙だな・・・