You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by "Chitnis, Pooja" <Po...@BMC.com> on 2016/01/21 06:54:15 UTC

[cli]

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

Re: [cli]

Posted by Benedikt Ritter <br...@apache.org>.
Hello Pooja,

2016-01-21 6:54 GMT+01:00 Chitnis, Pooja <Po...@bmc.com>:

> 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?
>

You could file an issue in our bug tracker [1]. I haven't seen much
activity in [cli] since the last release, so patches welcome! :-)

Regards,
Benedikt

[1] https://issues.apache.org/jira/browse/cli


>
> Thanks,
> -Pooja
>



-- 
http://home.apache.org/~britter/
http://twitter.com/BenediktRitter
http://github.com/britter