web-dev-qa-db-ja.com

Apache Commons CLI-オプションタイプとデフォルト値

CLIオプションにintIntegerなどのタイプを指定するにはどうすればよいですか? (後で、単一の関数呼び出しで解析された値を取得するにはどうすればよいですか?)

CLIオプションにデフォルト値を指定するにはどうすればよいですか? CommandLine.getOptionValue()または上記の関数呼び出しがコマンドラインで指定されていない限り、その値を返すように?

37
aib

編集:デフォルト値がサポートされるようになりました。以下の回答 https://stackoverflow.com/a/14309108/1082541 を参照してください。

Brent Wordenがすでに述べたように、デフォルト値はサポートされていません。

Option.setTypeの使用にも問題がありました。タイプInteger.classのオプションでgetParsedOptionValueを呼び出すと、常にnullポインター例外が発生しました。ドキュメントがあまり役に立たなかったので、ソースコードを調べました。

TypeHandler クラスと PatternOptionBuilder クラスを見ると、intまたはIntegerNumber.classを使用する必要があることがわかります。

そして、ここに簡単な例があります:

CommandLineParser cmdLineParser = new PosixParser();

Options options = new Options();
options.addOption(OptionBuilder.withLongOpt("integer-option")
                      .withDescription("description")
                      .withType(Number.class)
                      .hasArg()
                      .withArgName("argname")
                      .create());

try {
    CommandLine cmdLine = cmdLineParser.parse(options, args);

    int value = 0; // initialize to some meaningful default value
    if (cmdLine.hasOption("integer-option")) {
        value = ((Number)cmdLine.getParsedOptionValue("integer-option")).intValue();
    }

    System.out.println(value);
} catch (ParseException e) {
    e.printStackTrace();
}

valueに収まらない数値を指定すると、intがオーバーフローする可能性があることに注意してください。

48
Patrick Spettel

機能していないか、最近追加されたかどうかはわかりませんが、 getOptionValue()hasデフォルト(文字列)値を受け入れるオーバーロードされたバージョン

27
Mr_and_Mrs_D

OptionBuilderはバージョン1.3および1.4で非推奨になり、Option.Builderにはタイプを設定する直接関数がないようです。 Optionと呼ばれるsetTypeクラスの関数があります。関数CommandLine.getParsedOptionValueを使用して、変換された値を取得できます。それがビルダーの一部ではなくなった理由がわかりません。今は次のようなコードが必要です。

    options = new Options();

    Option minOpt = Option.builder("min").hasArg().build();
    minOpt.setType(Number.class);
    options.addOption(minOpt);

そしてそれを読む:

    String testInput = "-min 14";
    String[] splitInput = testInput.split("\\s+");

    CommandLine cmd =  CLparser.parse(options, splitInput);
    System.out.println(cmd.getParsedOptionValue("min")); 

これは、タイプLongの変数を与えます

2
ramin

CLIはデフォルト値をサポートしていません。設定されていないオプションがあると、getOptionValuenullを返します。

Option.setType メソッドを使用してオプションタイプを指定し、解析されたオプション値を CommandLine.getParsedOptionValue を使用してそのタイプとして抽出できます。

1
Brent Worden

他の定義を使用することができます

getOptionValue:
public String getOptionValue(String opt, String defaultValue)

デフォルト値を文字列にラップします。

例:

String checkbox = line.getOptionValue("cb", String.valueOf(false));

出力:false

それは私のために働いた

0
Dhaval Aarya