I'm trying to use OptionGroup to mutually exclude arguments, and it seems
to be broken. I've setup --ip-address & --hostname as options in a single
group, then provide both on the "command line" and would expect the parser
to throw an AlreadySelectedException, but it doesn't... it happily parses
both. Should I raise a JIRA issue for this, or am I totally missing
something?
Bill-
public static void main(String[] args) {
fakeMain(new String[] { "--ip-address", "192.168.1.1",
"--hostname", "www.example.com"});
}
public static void fakeMain(String[] args) {
final PosixParser parser = new PosixParser();
final Options options = configureOptions();
// parse with the basic parser
CommandLine cmdLine = null;
try {
cmdLine = parser.parse(options, args);
} catch(ParseException e) {
e.printStackTrace();
return;
}
// get the IP address or hostname
if(cmdLine.hasOption("ip-address")) {
System.out.println("IP: " +
cmdLine.getOptionValue("ip-address"));
}
if(cmdLine.hasOption("hostname")){
System.out.println("Hostname: " +
cmdLine.getOptionValue("hostname"));
}
}
@SuppressWarnings("static-access")
public static Options configureOptions() {
Options options = new Options();
// create the group to specify either an IP or hostname
OptionGroup group = new OptionGroup();
group.addOption(OptionBuilder.withLongOpt("ip-address")
.withArgName("ip")
.hasArg()
.withDescription("IP address to use")
.create());
group.addOption(OptionBuilder.withLongOpt("hostname")
.withArgName("host")
.hasArg()
.withDescription("Hostname address to
use")
.create());
options.addOptionGroup(group);
return options;
}
*** OUTPUT ***
IP: 192.168.1.1
Hostname: www.example.com