30

私は Java でコマンド ライン アプリケーションを作成しており、入力引数を解析するために Apache Commons CLI を選択しました。

2 つの必須オプション(つまり、-input と -output) があるとします。新しい Option オブジェクトを作成し、必要なフラグを設定します。今のところ、それはすべて良いです。しかし、必須ではない 3 番目のオプションがあります。-ヘルプ。私が言及した設定では、ユーザーがヘルプを表示したい場合 (-help オプションを使用)、「-input と -output」が必要であると表示されます。これを実装する方法はありますか (Commons CLI API を介して、if (!hasOption) throw new XXXException() という単純なものではありません)。

4

2 に答える 2

36

この状況では、2 セットのオプションを定義し、コマンド ラインを 2 回解析する必要があります。最初のオプション セットには、必要なグループの前にあるオプション (通常は--help--version) が含まれ、2 番目のセットにはすべてのオプションが含まれます。

オプションの最初のセットを解析することから始めます。一致するものが見つからない場合は、2 番目のセットに進みます。

次に例を示します。

Options options1 = new Options();
options1.add(OptionsBuilder.withLongOpt("help").create("h"));
options1.add(OptionsBuilder.withLongOpt("version").create());

// this parses the command line but doesn't throw an exception on unknown options
CommandLine cl = new DefaultParser().parse(options1, args, true);

if (!cl.getOptions().isEmpty()) {

    // print the help or the version there.

} else {
    OptionGroup group = new OptionGroup();
    group.add(OptionsBuilder.withLongOpt("input").hasArg().create("i"));
    group.add(OptionsBuilder.withLongOpt("output").hasArg().create("o"));
    group.setRequired(true);

    Options options2 = new Options();
    options2.addOptionGroup(group);

    // add more options there.

    try {
        cl = new DefaultParser().parse(options2, args);

        // do something useful here.

    } catch (ParseException e) {
        // print a meaningful error message here.
    }
}
于 2012-05-29T12:02:22.870 に答える