Commons CLI で引数解析
CLI(Command Line Interface) は、Java アプリケーションのコマンドライン引数を解析してくれるライブラリです。
Usage なども簡単に出力出来るようにしてくれるのでとても便利です。
コマンドラインの parser には BasicParser,PosixParser,GnuParser があります。基本的には BasicParser を使用するのですが、
PosixParser を使用すれば、Unix のようにまとめて引数を指定することが可能です。
usage: CLITest [-d] [-?] [-f format]
-? show help
-d debug
-f <format> output format
このようなコマンドが合った場合、
- BasicParser - -d -f yyyymmdd と指定しなければならない
- PosixParser - -df yyyymmdd と指定可能
ソース記述例
import java.text.*;
import java.util.*;
import org.apache.commons.cli.*;
import org.apache.commons.cli.ParseException;
public class CLITest {
public void execute(String[] args) {
Options options = createOptions();
CommandLineParser parser = new BasicParser();
try {
CommandLine comLine = parser.parse(options, args);
if (comLine.hasOption("?")) {
showUsage(options);
System.exit(0);
}
DateFormat df;
if (comLine.hasOption("f")) {
df = new SimpleDateFormat(comLine.getOptionValue("f"));
} else {
df = DateFormat.getDateInstance();
}
if (comLine.hasOption("d")) {
System.out.println("debug");
}
System.out.println(df.format(new Date()));
} catch (ParseException e) {
showUsage(options);
System.exit(-1);
}
}
private Options createOptions() {
Options options = new Options();
OptionBuilder.withArgName("format");
OptionBuilder.hasArg();
OptionBuilder.withDescription("output format");
options.addOption(OptionBuilder.create("f"));
options.addOption("?", false, "show help");
options.addOption("d", false, "debug");
return options;
}
private void showUsage(Options options) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp(getClass().getName(), options, true);
}
public static void main(String[] args) {
new CLITest().execute(args);
}
}
実行結果
$ java CLITest
2004/01/01
$ java CLITest -?
usage: CLITest [-d] [-?] [-f format]
-? show help
-d debug
-f <format> output format
$ java CLITest -f "yyyy/MM/dd HH:mm:ss.SSS"
2004/01/01 12:01:25.859
|