非常によく忘れるので、メモ。
Exec Maven Plugin exec:java
http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html
Exec Maven Pluginを使うことで、pom.xmlにメインクラスや引数指定が書けるのですが使い捨てのプログラムのためにいちいち設定するのも面倒なので、いつもコマンドラインから指定するのですが…これを非常によく忘れます。
というわけで、まとめを。
書き方としては、こんな感じです。
$ mvn exec:java -Dexec.mainClass=[メインクラス名]
引数を付ける場合は、
$ mvn exec:java -Dexec.mainClass=[メインクラス名] -Dexec.args=[引数]
です。
ドキュメントには、「exec.arguments」というプロパティで引数が指定できると書いているのですが、忘れていいと思います。
exec.argsを使いましょう、argsを。
簡単な確認のために、こんなプログラムを用意。
src/main/java/example/Main.java
package example; public class Main { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.printf("arg%d = %s%n", (i + 1), args[i]); } } }
引数なし。
$ mvn exec:java -Dexec.mainClass=example.Main
引数ひとつ。
$ mvn exec:java -Dexec.mainClass=example.Main -Dexec.args=Hello arg1 = Hello
引数ふたつ。
$ mvn exec:java -Dexec.mainClass=example.Main -Dexec.args="Hello World" arg1 = Hello arg2 = World
クォートして、その中でスペースで区切ることで、複数の引数を渡せます。
引数自体にスペースを含む場合は、シングルクォートなりで囲むとよいでしょう。
$ mvn exec:java -Dexec.mainClass=example.Main -Dexec.args="'Hello World' 'foo bar' fuga hoge" arg1 = Hello World arg2 = foo bar arg3 = fuga arg4 = hoge
あと、exec:javaだけだとコンパイルはしてくれないので、自分はこんな感じで書いています。
$ mvn compile exec:java -Dexec.mainClass=example.Main -Dexec.args="'Hello World'"