I can create 2 mutually exclusive options using the following:
Option a = OptionBuilder.create("a");
Option b = OptionBuilder.create("b");
OptionGroup optgrp = new OptionGroup();
optgrp .setRequired(true);
optgrp .addOption(a);
optgrp .addOption(b);
The above will force the user to provide either option a or option b.
But if I have a third option, c:
Option c = OptionBuilder.create("c");
is it possible to create mutually exclusive options such that:
Either:
I couldn't see a way to do it using OptionGroup?
The Apache Commons CLI library provides an API for parsing command line options passed to programs. It's also able to print help messages detailing the options available for a command line tool. Commons CLI supports different types of options: A typical help message displayed by Commons CLI looks like this:
Commons CLI The Apache Commons CLI library provides an API for parsing command line options passed to programs. It's also able to print help messages detailing the options available for a command line tool. Commons CLI supports different types of options:
Apache Commons CLI provides HelpFormatter class to print the usage guide of command line arguments. See the example given below − Run the file and see the result. java CLITester usage: CLITester -g,--gui Show GUI Application -n <arg> No. of copies to print -p,--print Send print request to printer.
As a workaround to this, I implemented the following, not ideal, but..
public static void validate(final CommandLine cmdLine) {
final boolean aSupplied = cmdLine.hasOption(A);
final boolean bAndCSupplied = cmdLine.hasOption(B) && cmdLine.hasOption(C);
final boolean bOrCSupplied = !bAndCSupplied && (cmdLine.hasOption(B) || cmdLine.hasOption(C));
if ((aSupplied && bAndCSupplied) || (!aSupplied && !bAndCSupplied)
|| (aSupplied && bOrCSupplied )) {
throw new Exception(...);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With