この場合、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.
}
}
[OK]をクリックします。しかし、どのように私は試合を見つけていないと言うことができますか? (「一致するものが見つからなければ」)?必要なフラグを設定した場合、ParseExeceptionを取得しますが、使用できないオプションを渡すと、ParseExceptionも発生します:(このケースを区別するにはどうすればよいですか?) – pavel
'commandline.getOptions()' isn ' t empty。 –
Ok。可能な解決策ですが、サポートされていないオプションはどうしたらいいですか?-help、-input、-outputなどのオプションがあります。見つからなかった場合、UnrecognizedOptionExceptionがスローされた場合、2番目のオプションを解析する必要がありますか?それはあなたが提案したものです。助けてくれてありがとうbtw :) – pavel