CLOVER🍀

That was when it all began.

Mavenのexec:javaの使い方をまとめる

非常によく忘れるので、メモ。

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'"