9

我使用 Apache Commons CLI 来解析命令行参数。

我正在寻找一种在帮助中显示多个参数值名称的方法。以下是选项“startimport”的一个参数的示例:

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

当我使用 -help 时,它会打印出来:

-startimport <environment>                    Description

那很好。但是如果我想使用两个参数呢?

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

解析这两个参数不是问题,但我希望“-help”中的以下输出:

startimport <firstArg> <secondArg>                    Description

但目前我只会得到:

startimport <firstArg secondArg>                    Description

这个问题有合适的解决方案吗?

4

2 回答 2

26

我找到了一种以行为正确的方式解决此问题的方法,并认为我会分享,因为这是谷歌在研究时引导我访问的页面之一。此代码是使用 Commons CLI 1.2 编写的。

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

帮助消息如下所示:

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

它可以像这样从命令行使用:

java -jar program.jar -t id 5

并且可以在如下代码中检索参数的 String[]:

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

searchArgs[0]然后您可以使用和检索值searchArgs[1]

于 2013-02-26T15:52:54.197 回答
11

我用了一个顽皮的方法来解决这个问题。

    OptionBuilder.hasArgs(3);
    OptionBuilder.withArgName("hostname> <community> <oid");
    OptionBuilder.withDescription("spans switch topology. Mutually exclusive with -s");
    Option my_a = OptionBuilder.create("a");

它现在正确显示在帮助中。虽然我不确定这是否会产生后果。

于 2012-11-20T04:58:24.287 回答