Args4jを使ってコマンドライン引数を処理する
Javaでコマンドライン引数を処理したいなー、でもApache Commons CLIは煩雑だよなー、などと思いながら他のライブラリを探していたら、Args4jという簡単に使える素敵ライブラリを見つけた。Annotationを使ってすっきり書ける。
Args4jのバイナリはなんか公式ページで配布されていなかったので、mavenリポジトリの方から取ってきた。
ということでShellっぽいサンプルプログラムを。完全に使い方を把握してる訳じゃないけど、Args4jが提供してるクラスは大して数も多くないし、いざとなったときに調べたらすぐにわかりそうな感じ。
import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.Option; import org.kohsuke.args4j.spi.StringArrayOptionHandler; public class Shell { @Option(name="-v", aliases="--version", usage="print version") private boolean versionFlag; @Option(name="-h", aliases="--help", usage="print usage message and exit") private boolean usageFlag; @Argument(index=0, metaVar="script") private String script; @Argument(index=1, metaVar="arguments...", handler=StringArrayOptionHandler.class) private String[] arguments; public static void main(String[] args) { Shell shell = new Shell(); CmdLineParser parser = new CmdLineParser(shell); try { parser.parseArgument(args); } catch (CmdLineException e) { e.printStackTrace(); return; } if (shell.usageFlag) { System.out.println("Usage:"); System.out.println(" Shell [options]"); System.out.println(" Shell [options] script [arguments]"); System.out.println(); System.out.println("Options:"); parser.printUsage(System.out); return; } if (shell.versionFlag) { System.out.print("Sample Program ver 1.0.0"); return; } // do something... } }
-h(--help)をつけて起動するとこんな感じで出力される。
Usage: Shell [options] Shell [options] script [arguments] Options: -h (--help) : print usage message and exit -v (--version) : print version
補足
- @Optionでrequired=trueってやると、必須パラメータを設定することもできる。
- org.kohsuke.args4j.spiパッケージにはStringArrayOptionHandlerの他にもEnumOptionHandlerとかFileOptionHandlerとか入ってるので、ごにょごにょできそう。