Hi cli dev team,
I recently upgraded to the commons-cli version 1.3.1 where the BasicParser is
deprecated. So if I sue the DefaultParser instead, my following sample code
would not work -
public static void main(String[] args) throws Exception {
Options options = getOptions();
if (args != null && args.length == 1 && args[0].equals("-?")) {
CommandLineUtils.printHelp("adfg", options);
System.exit(2);
}
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, args);
String name1 = cmd.getOptionValue("name1");
String name2 = cmd.getOptionValue("name2");
String name3 = cmd.getOptionValue("name3");
System.out.println("name1 : " + name1);
System.out.println("name2 : " + name2);
System.out.println("name3 : " + name3);
}
private static Options getOptions() {
Options options = new Options();
Option asOption = new Option("name1", true, "name1");
asOption.setRequired(true);
options.addOption(asOption);
Option dsOption = new Option("name2", true, "name2");
dsOption.setOptionalArg(true);
dsOption.setRequired(false);
options.addOption(dsOption);
Option dcOption = new Option("name3", true, "name3");
dcOption.setRequired(true);
options.addOption(dcOption);
return options;
}
The input args passed to main method are: -name1 val1 -name2 -name3 val3
Note that I have not passed val for the -name2. If I remove the -name2 it will
work but its user driven. Previously with BasicParser this use to work.
Here it throws following exception
Exception in thread "main" org.apache.commons.cli.MissingOptionException:
Missing required option: name3
at
org.apache.commons.cli.DefaultParser.checkRequiredOptions(DefaultParser.java:199)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:130)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:76)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:60)
at test.DefaultParserTest.main(DefaultParserTest.java:26)
It seems a bug in the DefaultParser. Can you please fix this?
Thanks,
-Pooja