Java Apache Commons CLI:获取选项的值列表

Java Apache Commons CLI:获取选项的值列表,java,command-line-interface,apache-commons,Java,Command Line Interface,Apache Commons,对于CLI,我需要传入一个int数组作为特定选项的输入 示例-下面的命令将接收CustomerID数组并执行一些操作 myCommand-c 123 124 125 我已经使用Apache commons CLI实现了CLI,并且正在使用getOptionValues(“c”)检索此阵列 问题是,这只返回数组中的第一个元素,即[123],而我希望它返回[123124125] 我的代码的浓缩版本 CommandLine cmd; CommandLineParser parser = new Bas

对于CLI,我需要传入一个int数组作为特定选项的输入

示例-下面的命令将接收CustomerID数组并执行一些操作

myCommand-c 123 124 125

我已经使用Apache commons CLI实现了CLI,并且正在使用getOptionValues(“c”)检索此阵列

问题是,这只返回数组中的第一个元素,即[123],而我希望它返回[123124125]

我的代码的浓缩版本

CommandLine cmd;
CommandLineParser parser = new BasicParser();
cmd = parser.parse(options, args);
if (cmd.hasOption("c")){
String[] customerIdArray = cmd.getOptionValues("c");
// Code to parse data into int
}

有人能帮我找出这个问题吗?

您必须设置该选项可以接受的最大参数值数量,否则它假定该选项只有一个参数值

Options options = new Options();
Option option = new Option("c", "c desc");
// Set option c to take maximum of 10 arguments
option.setArgs(10);
options.addOption(option);

我想在这里补充这个问题,作为对@Zangdak的回答,并补充我对同一问题的发现

如果不调用
#setArgs(int)
,则会发生运行时异常。当您知道此选项的参数的确切最大数量时,请设置此特定值。当该值未知时,类选项有一个常数:
Option.UNLIMITED\u value

这将使Gerrytan的答案改变为:

Options options = new Options();
Option option = new Option("c", "c desc");
// Set option c to take 1 to oo arguments
option.setArgs(Option.UNLIMITED_VALUES);
options.addOption(option);

看起来我参加聚会有点晚了,但ApacheCommons cli已经发展起来,现在(至少在1.3.1中)我们有了一种新的方法来设置参数的数量可以是无限的

Option c = Option.builder("c")
        .hasArgs() // sets that number of arguments is unlimited
        .build();
        Options options = new Options();
        options.addOption(c);

必须指定两个参数
setArgs
setValueSeparator
。然后可以传递参数列表,如
-k=key1、key2、key3

Option option = new Option("k", "keys", true, "Description");
// Maximum of 10 arguments that can pass into option
option.setArgs(10);
// Comma as separator
option.setValueSeparator(',');

如果参数值的最大数目未知?有可能有一个带括号的语法吗?是的,我就是这么做的,但我想得到一个更像下面这样的语法:
cmd-opt1{V1 V2…Vn}arg
但它似乎不存在,所以我只是把参数放在具有无限值的选项之前。@Zangdok如果我理解正确,这就把我带到了同一个问题,不受限制的_值在所有这些值之后有另一个选项是没有问题的。我可以确认,类似于
cmd--opt={V1 V2…Vn}-o--debug
的东西正在工作。不,在具有无限值的选项之后的另一个选项工作得很好。我想在这样的选择之后进行辩论。无论如何,我会试试你的语法。你也可以使用OptionBuilder.hasArgs(),如果你正在调用hasArgs(),那么hasArg()调用是冗余的