最新版のCLIでは、使い方が少し変わっている → cf. Jetty +Apache CLI


概要

  1. CLI = Command Line Interface
  2. Javaを実行するときのコマンドライン引数を解釈するためのライブラリです

インストール

  1. ダウンロードサイトから、
    cli-1.0.zip
    をダウンロードします
  2. 展開して出来た、
    commons-cli-1.0.jar
    をクラスパスに加えます。

CLIの利用方法(サンプルコード)

 package com.snail;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.cli.PosixParser;
 
 public final class CLIExam {
 
   /**
    * デフォルトコンストラクタの無効化
    */
   private CLIExam() {
     super();
   }
 
   /**
    * @param args
    *            コマンドライン引数
    */
   public static void main(String[] args) {
 
     // ---------- 1.コマンド引数の定義 ----------
 
     // コマンド引数全体を定義するオブジェクト
     Options options = new Options();
 
     // コマンド引数一つ分の定義(ソースファイル指定)
     OptionBuilder.withLongOpt("source");
     OptionBuilder.hasArg();
     OptionBuilder.isRequired();
     OptionBuilder.withArgName("ソース");
     OptionBuilder.withDescription("ソースファイルを指定します");
     Option srcOption = OptionBuilder.create("s");
 
     options.addOption(srcOption);
 
     // コマンド引数一つ分の定義(結果ファイル指定)
     OptionBuilder.withLongOpt("dest");
     OptionBuilder.hasArg();
     OptionBuilder.isRequired();
     OptionBuilder.withArgName("結果");
     OptionBuilder.withDescription("結果ファイルを指定します");
     Option destOption = OptionBuilder.create("d");
 
     options.addOption(destOption);
 
     // コマンド引数一つ分の定義(ヘルプ)
     OptionBuilder.withLongOpt("help");
     OptionBuilder.withDescription("このヘルプを表示します");
     Option helpOption = OptionBuilder.create("h");
 
     options.addOption(helpOption);
 
     // ---------- 2.コマンド引数のチェック ----------
     CommandLineParser parser = new PosixParser();
     // CommandLineParser parser = new BasicParser();
     // CommandLineParser parser = new GnuParser();
 
     // 解析
     CommandLine cmd = null;
     try {
       cmd = parser.parse(options, args);
     } catch (ParseException e) {
       // 必須オプションがない場合はヘルプを表示して終了
       HelpFormatter help = new HelpFormatter();
       help.printHelp(CLIExam.class.getName(), options, true);
       return;
     }
 
     if (cmd.hasOption("h")) {
       // ヘルプオプションが指定されていた場合には
       // ヘルプを表示して終了
       HelpFormatter help = new HelpFormatter();
       help.printHelp(CLIExam.class.getName(), options, true);
       return;
     }
 
     // ---------- 3.コマンド引数の解釈 ----------
     System.out.print(cmd.getOptionValue("s"));
     System.out.print("から");
     System.out.print(cmd.getOptionValue("d"));
     System.out.print("へコピーしました");
   }
 }

サンプルコードの処理手順

  1. コマンド引数の定義
    1. コマンド引数は Options オブジェクトに格納します
    2. コマンド引数1項目分の定義情報は Option オブジェクトに格納されます
    3. Option オブジェクトは、OptionBuilder? によって作成します。OptionBuilder? には以下の設定項目があります。
      メソッド説明引数例
      create(String)オプション文字列を指定します。2文字以上だと上手く動かないt
      withLongOpt?(String)オプション文字列の別名を指定しますtime
      withArgName?(String)オプション名を指定します時刻
      withDescription(String)コマンドの説明を指定します時刻を指定して下さい
      isRequired()必須項目であることを指定します
      hasArg()必須のコマンド引数があることを指定します
      hasArgs()「-a arg1 arg2 arg3」 のように、必須のコマンド引数が複数あることを指定します(デフォルトはスペース区切り)
      hasOptionalArg?()任意のコマンド引数があることを指定します
      hasOptionalArgs?()「-o op1 op2 op3」のように、任意のコマンド引数が複数あることを指定します(デフォルトはスペース区切り)
      withType(Object)コマンド引数をマッピングする型を指定できるはずだが、上手く動かない??
      withValueSeparator?(char)hasArgs()、hasOptionalArgs?()の区切り文字を指定します。デフォルト値はスペース','
  2. コマンド引数のチェック
    1. CommandLineParser? を使って、このアプリケーションの引数文字列 (main(String[] args)のargs) を解釈します。
    2. 結果は、CommandLine? オブジェクトに格納されます
    3. 必須項目がないなどのエラーが起きたときには、ParseException? が発生します。
    4. ヘルプを整形して表示するには HelpFormatter? をつかいます。
  3. コマンド引数の解釈
    1. CommandLine?#getOptionValue?(コマンドオプション名):String で、コマンドラインで指定された文字列を取得することが出来ます。
    2. CommandLine?#getOptionObject?(コマンドオプション名):Object は、上手く動かないので自分で型変換を行うのが吉

実行結果

  1. 引数無し
    > java com.snail.CLIExam
    
    usage: com.snail.CLIExam -s ソース -d 結果 [-h]
    -d,--dest <結果>        結果ファイルを指定します
    -h,--help             このヘルプを表示します
    -s,--source <ソース>     ソースファイルを指定します
  2. ヘルプ指定
    > java com.snail.CLIExam -h
    
    usage: com.snail.CLIExam -s ソース -d 結果 [-h]
    -d,--dest <結果>        結果ファイルを指定します
    -h,--help             このヘルプを表示します
    -s,--source <ソース>     ソースファイルを指定します
  3. 引数指定
    > java com.snail.CLIExam -s src.zip -d dset.zip
    
    src.zipからdest.zipへコピーしました
  4. オプションの別名指定
    > java com.snail.CLIExam --source src.zip --dest dset.zip
    
    src.zipからdest.zipへコピーしました

参考文献

  1. http://jakarta.apache.org/commons/cli/

Java#Jakarta


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2020-02-10 (月) 01:09:55 (1771d)
Short-URL: http://at-sushi.com/pukiwiki/pukiwiki.php?cmd=s&k=08281421e7
ISBN10
ISBN13
9784061426061