Javaでコマンドラインアプリケーションを作成しており、入力引数を解析するためにApache CommonsCLIを選択しました。
2つの必須オプション(つまり、-inputと-output)があるとしましょう。新しいOptionオブジェクトを作成し、必要なフラグを設定します。今のところそれはすべて良いです。しかし、私は番目、必須ではないオプション、つまり。 -助けて。私が言及した設定では、ユーザーがヘルプを表示したい場合(-helpオプションを使用)、「-inputと-output」が必要であると表示されます。これを実装する方法はありますか(Commons CLI APIを介して、(!hasOption)が新しいXXXException()をスローする場合は簡単ではありません)。
この状況では、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.
}
}