作成 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
翻訳サイト