Sta*_*art 2 java command-line-interface apache-commons-cli
我正在尝试构建一个复杂的参数列表,而不使用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);
Run Code Online (Sandbox Code Playgroud)
CommandLine不区分必需参数和可选参数...如何在不必为可选选项链接第二个解析器的情况下检索它们?
我不确定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");
Run Code Online (Sandbox Code Playgroud)
我不是100%肯定,如果第一个,endpoint将需要两个参数或只需要一个,但可以接受最多两个; 完全使用两个不同的论点可能会更清楚.
这将导致帮助热线看起来像:
usage: admin
-endpoint <point> [<point>]
-update
-name <name>
[-type <type>]
[-description <description>]
Run Code Online (Sandbox Code Playgroud)
我通常使用常量作为字符串名称:
public static final String ENDPOINT = "endpoint";
...
Option endpoint = OptionBuilder.hasArg().create(ENDPOINT);
Run Code Online (Sandbox Code Playgroud)
这样你以后可以参考它:
CommandLine opts = parser.parse(myopts, argv);
String endpoint = opts.getOptionValue(ENDPOINT);
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
6624 次 |
| 最近记录: |