Java Apache Commons CLI 1.3.1:具有多个参数的另一个选项之后的选项将作为参数使用

Java Apache Commons CLI 1.3.1:具有多个参数的另一个选项之后的选项将作为参数使用,java,apache-commons,apache-commons-cli,Java,Apache Commons,Apache Commons Cli,我使用Apache Commons CLI 1.3.1来处理一些选项,其中一些选项可以接受一到无限个参数。有两个选项的琐事示例如下 usage: myProgram -optionX <arg1> <arg2> <arg3> < ... > [-optionY] -optionX <arg1> <arg2> <arg3> < ... > optionX takes one to unlimited

我使用Apache Commons CLI 1.3.1来处理一些选项,其中一些选项可以接受一到无限个参数。有两个选项的琐事示例如下

usage: myProgram -optionX <arg1> <arg2> <arg3> < ... > [-optionY]
-optionX <arg1> <arg2> <arg3> < ... >   optionX takes one to unlimited
                                        number of arguments.
-optionY                                optionY is optional
这是您将看到的输出

--------------------------
argument list of optionX: 
arg: arg1
arg: arg2
arg: -optionY
--------------------------
value of optionY: false
我错过什么了吗


如果您有任何建议,我们将不胜感激。

问题在于您将长名称放在了选项的短名称中

当您使用
Option optObj1=Option.builder(“optionX”)…
new Option(“optionY”,“optionY是可选的”)
时,您正在设置选项的短名称,该名称的长度应仅为1个字符

在有多个参数选项之前,这一切都很好。在这种情况下,解析器无法在其短选项列表中找到“o”(选项的第一个字母),并且您没有长名称集,因此解析器确定-optionY只是-optionX的另一个参数

要解决您的问题,只需设置选项的长选项名称,它就会正常工作。

示例

Option.builder("x").longOpt("optionX")....

Option optObj2 = new Option("y", "optionY", hasArgs, "optionY is optional");

您的第二个选项可能不应具有与第一个选项相同的短期值。
Option.builder("x").longOpt("optionX")....

Option optObj2 = new Option("y", "optionY", hasArgs, "optionY is optional");