NetBeansのMavenプロジェクトでJMockit

JMockitを使って実クラスの振る舞いを弄るにはVM引数に以下の設定を追加する必要がある訳で、

-javaagent:/(path-to-jmockit.jar)/jmockit.jar

通常のNetBeansJavaプロジェクトではそれは

して表示されるVMオプションに設定すればいい訳ですが、Mavenプロジェクトではそうはいかないようです。と、いうかMavenのWebプロジェクトではそもそも「VM引数」なんてものすら見つかりません。

ではどうすればいいのか。

悩みました。

そもそも、NetBeansのMaveプロジェクトのビルドプロセスはmavenと完全に統合されているようです。それはもう、例えて言うなら、通常のNetBeansプロジェクトのビルドプロセスがantと完全に統合されているが如しです。即ち、NetBeansMavenプロジェクトでは、ビルドするにしても実行するにしてもデバッグするにしてもテストコードを実行するにしても、何をするにしても全てmavenを通して動くようです。当然、テストクラスを右クリックして「ファイルを実行」としても、mavenが起動されてmavenjunitプラグインを通して選択中のテストクラス1つだけが実行されます。

即ち

VM引数も、NetBeansに対してでは無く、mavenに対して設定しなければならんようです。加えて、mavenはどうもテストケースは設定次第ではmaven本体とは別VMを立ち上げて実行したりとかするらしいので、環境変数MAVEN_OPTS」とかに設定しても駄目みたいです(というか、デフォルト設定ではNetBeansNetBeansに組み込まれている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プロジェクトで使えれば私的にはそれでいいんですけど、微妙と言えば微妙だな・・・