2011-12-21 8 views
7

は、私はすべてのオプションが ApacheのCLIライブラリにString []型の入力で提供されているかどうかをチェックするための標準的な方法が表示されません。つまり、私のオプションはすべてコマンドラインでREUIREDされます。それ以外の場合は、例外をスローする必要があります。すべての引数がApache Commons CLIで確実に提供されるようにする方法は?

Imは、回避策として、次のことをしようとしますが、if文でnullポインタ例外を取得... THIS ON

PosixParser p = new PosixParser(); 
     CommandLine cli=p.parse(options,args); 
     for(Object o : options.getOptions()) 
     { 
      Option op = (Option)o; 
      if(cli.getOptionValue(op.getName())) 
      throw new ParseException("Missing argument ! " + op.getArgName() + ":"+op.getDescription()); 
    } 

UPDATE:のgetopt()メソッドは、引数に短い名前を提供しているようです。私はopt.getLongName()とop.getName()を置き換える場合

はしかし、...それは働きます!いずれの場合においても

..私は2つの質問があります。

1)なぜオプションがnullの名前、まだnull以外LONGNAMEを持っているでしょうか?
2)単純にすべてのオプションがString []を提供していることを確認する方法はありますか?例えば、私が呼び出すしたいと思います:

if(! options.isAllProvided()) 
    throw new ParseException("You are missing some options ! " + StringUtils.join(userInputArray,',')); 
+0

だけ気づい:その短い名前でオプションを取得するためには、むしろgetArgNameよりのgetopt()、()、または任意の他のメソッドを呼び出します。 – jayunit100

答えて

9

ここであなたが必要とするオプションを設定することができます方法は次のとおりです。

Option logfile = OptionBuilder.withArgName("file") 
      .isRequired() // make it required 
      .hasArg() 
      .withDescription( "use given file for log") 
      .create("logfile"); 

(私は必要なすべてのオプションを作成する簡単な方法はないと思います1つのステップ)

+1

hmmm ...悪いです。このapiのような復活が必要です。 – jayunit100

+0

実際には、必要に応じてオプションに印を付ける必要があります。いくつかのオプションがない場合は、欠落しているオプションのリストを含む例外が発生します。 –

+0

は確かにそれは冗長で醜いですが、私のような方法でファクトリクラスを作り 'makeRequiredOption'が大幅にあなたのメインクラスの可読性を向上させることができますを見つけます。 – bcoughlan

関連する問題