2016-11-14 10 views
2

現在、ライブラリApache Commons CLI 1.3.1を使用してコマンドライン引数を解析し、実行可能なjarファイルの実行フローを制御しています。これまでのところすべてがかなり単純で、documentationexample usageのページは比較的徹底して役立ちました。Apache Commons CLIを使用してコマンドライン引数/オプションが存在しないことを検出する

ただし、このライブラリを使用して引数やオプションがないことを検出する方法についてはまだ不明です。私はこの状態を検出し、使用法/ヘルプ文を印刷したいと思います。私は引数の配列の長さを調べるだけでこの問題を回避しましたが、ライブラリがすべてのオプションの有無をチェックすることなくこの条件を検出する方法を持っているかどうかを知りたいと思います。

public static void main(String[] args) 
{ 
    try 
    { 
     // create Options object 
     Options options = new Options(); 

     // add t option 
     options.addOption("t", false, "display current time"); 
     options.addOption("help", false, "print this message"); 

     CommandLineParser parser = new DefaultParser(); 
     CommandLine cmd = parser.parse(options, args); 

     if(cmd.hasOption("t")) { 
      log.debug("Received option t"); 
      // Do something 
     } 

     if (args.length <= 0 || cmd.hasOption("help")) 
     { 
      // automatically generate the help statement 
      HelpFormatter formatter = new HelpFormatter(); 
      formatter.printHelp("java -jar Client.jar <option> <arguments>", options); 
     } 
    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
} 

答えて

2

私はあなたがgetArgListgetArgs方法を探していると思う:ここ

は仕事の周りに左と私のコードです。ドキュメントから:このような

if (args.length <= 0 || cmd.hasOption("help")) 

用途:

任意の左にわたって非認識オプションと引数

ので、代わりにこれを取得します

if (cmd.getArgs().length == 0 || cmd.hasOption("help")) 
+0

B eautiful。私はドキュメントを誤解していました。私はこれが特定のオプションのために提出された引数リストだと思っていました。ありがとうございました。 BTWそれは 'cmd.getArgs()。length'でなければなりません。 – Matt1776

+0

あなたのプログラムが引数なしのスイッチを期待している場合、これはうまくいきません。例えば、私がそのメソッドを使用すると、コマンドが 'client.jar -t'であってもヘルプが表示されます – Matt1776

+1

こんにちは、訂正ありがとう!あなたのプログラムが余分な引数を持つべきでないならば、もちろん、あなたは条件を変更すべきであり、実際にはその場合にエラーが発生します。 – janos

関連する問題