現在、Apache の共通 CLI ライブラリを使用してコマンド ライン オプションを解析していますが、条件付きの要件を簡単に処理できる方法はないかと考えていました。
たとえば、以下の例では、2 つの必須オプション-a
と-b
オプションの があり-h
、説明を表示する必要があります。パーサーが現在動作する方法は、必要なオプションの 1 つが欠落している場合はいつでも ParserException をスローすることを期待するというものです。ここまでは順調ですね。-h
私の質問は、が指定されているときに必要なオプションを検索しない方法があるかどうかです。これ-h
は、ヘルプのみを出力し、実際にアプリを起動しないのが一般的であるため、他のコマンド ライン オプションのチェックをスキップしたいと思います。
import org.apache.commons.cli.*;
public class MyClass {
...
public static void main(String[] parameters)
{
Options options = new Options();
Option opt_a = Option.builder("a")
.argName("A Option")
.required(true)
.longOpt("a-option")
.desc("First option")
.build();
Option opt_b = Option.builder("b")
.argName("B Option")
.required(true)
.longOpt("b-option")
.desc("Second option")
.build();
Option opt_h = Option.builder("h")
.argName("Help")
.longOpt("help")
.desc("Shows this help")
.build();
options.addOption(opt_a);
options.addOption(opt_b);
options.addOption(opt_h);
CommandLineParser parser = new DefaultParser();
try {
CommandLine cmd = parser.parse(options, args);
...
} catch (ParseException e) {
System.err.println("Error parsing command line options");
System.err.println(e.getMessage());
usage(options);
System.exit(1);
}
}
public static void usage(Options options) {
String header = "My application\n\n";
String footer = "\nPlease report issues at http://github.com/user/repo/issues";
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("MyApp", header, options, footer, true);
}
}