2

我正在尝试构建一个复杂的参数列表,而无需使用 commons-cli 项目链接多个解析器...

基本上我想了解参数和可选参数是如何一起工作的......

示例命令帮助

$ admin <endpoint> <update> <name> [<type>] [<endpoint>] [<descriptions>]

//sample option creation for a    
options.addOption(OptionBuilder.hasArgs(3).hasOptionalArgs(2)
                .withArgName("name> <type> <uri> [<description>] [<endpoint>]")
                .withValueSeparator(' ')
                .create("add"));

CommandLine line = parser.parse(options, args, true);

CommandLine 不区分必需参数和可选参数......我怎样才能检索它们而不必为可选选项链接第二个解析器?

4

1 回答 1

5

我不确定 Commons CLI 是否适用于未命名的、位置相关的参数,这似乎是您正在寻找的。我写这个的方式是:

Option endpoint    = OptionBuilder.hasArgs(2)   .isRequired(true) .create("endpoint");
Option update      = OptionBuilder.hasArg(false).isRequired(false).create("update");
Option name        = OptionBuilder.hasArg(true) .isRequired(true) .create("name");
Option type        = OptionBuilder.hasArg(true) .isRequired(false).create("type");
Option description = OptionBuilder.hasArg(true) .isRequired(false).create("description");

我不能 100% 确定第一个endpoint参数 , 是否需要两个参数,或者只需要一个参数但最多可以接受两个参数;完全使用两个不同的论点可能会更清楚。

这将导致帮助行看起来像:

usage: admin
-endpoint <point> [<point>]
-update
-name <name>
[-type <type>]
[-description <description>]

我通常使用一个常量作为字符串名称:

public static final String ENDPOINT = "endpoint";
...
Option endpoint = OptionBuilder.hasArg().create(ENDPOINT);

这样您以后可以参考它:

CommandLine opts = parser.parse(myopts, argv);
String endpoint = opts.getOptionValue(ENDPOINT);

希望有帮助!

于 2013-08-10T19:20:50.513 回答