作成 2003/2/18
CLIは、Command Line Interfaceの略で、 Javaアプリケーションの引数をパースするライブラリです。 例えば、
Java SomeApp -a -size=600 -cとかいうJavaアプリの引数解析を行う共通のインターフェイスと いくつかのパーサーの実装が提供されています。 最近ツール作りがたまにあるので、 ちょっと調べてみました。
ドキュメントに簡単なサンプルが載っていたので、 そのとおりに実装してみました。 現在日付(or時間)を表示するJavaアプリケーションです。
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.apache.commons.cli.*;
/**
* CLIの練習
*/
public class DateApp {
public static void main(String[] args) {
Options options = new Options();
options.addOption("t", false, "display current time");
//options.addOption("c", true, "by locale");
options.addOption(OptionBuilder
.withArgName("locale")
.hasArg()
.withDescription( "with locale" )
.create( "c") );
options.addOption("h", false, "display help");
CommandLineParser parser
= new BasicParser();
//= new PosixParser();
//= new GnuParser();
try {
CommandLine cl = parser.parse(options, args);
if(cl.hasOption("h") ){
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp( "Test1", options, true);
return;
}
DateFormat df;
Locale locale;
String countryCode = cl.getOptionValue("c");
if (countryCode == null) {
locale = Locale.getDefault();
} else {
locale = new Locale(countryCode);
}
if (cl.hasOption("t")) {
df = DateFormat.getTimeInstance(DateFormat.FULL, locale);
} else {
df = DateFormat.getDateInstance(DateFormat.FULL, locale);
}
System.out.println(df.format(new Date()));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
実行結果
C:\apps\eclipse\workspace\cli01>java DateApp 2003年2月18日 (火曜日) C:\apps\eclipse\workspace\cli01>java DateApp -t 22時36分56秒 JST C:\apps\eclipse\workspace\cli01>java DateApp -t -c en 10:58:42 PM JST C:\apps\eclipse\workspace\cli01>java DateApp -h usage: Test1 [-h] [-c locale] [-t] -c <locale> with locale -h display help -t display current time
tオプションで、時間表示(指定しなければ日付表示)、 cオプションはロケール引数付で指定したロケールで表示、 hオプションはヘルプ。
Options#addOption(...)のboolean引数は、 オプションにパラメータがあるかどうかを指定します。 ただし、この方法だと、help表示時にパラメータの説明にnullが表示されます。 説明をつけるには、OptionBuilderを使います。
自分で引数をパースしても、 それほど手間でもないですが、 オプションとパラメータ解析の仕組みが整っているCLIを 使ってみるのもいいかもしれません。 とりあえず、さわりだけ。 実際に使う機会があればもうちょっと調べようと思います。
ドキュメントはUsage Scenariosがわかりやすいです。 翻訳で概要を抑えて、若干バージョンが上がっている(?ドキュメントが増えている) 公式サイトを見るのがいいかも。
Jakarata Commons CLI
公式サイト
Jakartaの杜 Commons CLI
翻訳サイト