Apache Commons CLI muliple argument value names in the -help option

Metalhead89 picture Metalhead89 · Aug 3, 2012 · Viewed 16.7k times · Source

I use Apache Commons CLI for parsing command line arguments.

I am looking for a way to display multiple argument value names in the help. Here is an example for one argument of the option "startimport":

Option startimport = OptionBuilder
                .withArgName("environment")
                .hasArg()
                .withDescription(
                        "Description")
                .create("startimport");

When I use -help it prints out:

-startimport <environment>                    Description

Thatfs fine. But what if I want to use two arguments?

Option startimport = OptionBuilder
                .withArgName("firstArg secondArg")
                .hasArgs(2)
                .withDescription("Description")
                .create("startimport ");

Parsing the two arguments is not the problem but I want the following output in the "-help":

startimport <firstArg> <secondArg>                    Description

But currently I would just get:

startimport <firstArg secondArg>                    Description

Is there a proper solution for that problem?

Answer

macacollins picture macacollins · Feb 26, 2013

I found a way to solve this problem in a way that behaves correctly, and thought I'd share because this is one of the pages Google led me to while researching. This code was written using Commons CLI 1.2.

Option searchApp = OptionBuilder.withArgName("property> <value")
            .withValueSeparator(' ')
            .hasArgs(2)
            .withLongOpt("test")
            .withDescription("This is a test description.")
            .create("t");

The help message looks like:

-t,--test <property> <value>    This is a test description.

It can be used from the command line like this:

java -jar program.jar -t id 5

and a String[] of the arguments can be retrieved in code like this:

Options options = new Options();
options.addOption(searchApp);
PosixParser parser = new PosixParser();
CommandLine cmd = parser.parse( options, args);
String[] searchArgs = cmd.getOptionValues("t");

Then you can retrieve the values with searchArgs[0] and searchArgs[1].