0

另见https://github.com/remkop/picocli/issues/488

我有一个使用Map字段作为选项的应用程序:

@Option(names = "-P")
Map<String, String> properties;

因此用户可以指定如下值:

-Pmyprop=myvalue

Picocli 有一个选项可以使用CommandLine.setPosixClusteredShortOptionsAllowed(false).

However, in that configuration, options are no longer recognized when the option value is attached to the option name. 上面的示例-Pmyprop=myvalue失败并出现异常:

picocli.CommandLine$UnmatchedArgumentException: Unknown option: -Pmyprop=myvalue

当我用空格分隔选项名称-P和选项值(键值对)时,该值被正确解析:

-P myprop=myvalue // this works

这是预期的行为吗?IMO,地图选项与其他选项不同,即使在不允许集群短选项的情况下,支持前者也会很有用。

4

1 回答 1

0

是的,在 picocli 3.6 及更早版本中,这是预期的行为。

POSIX 允许将选项参数值附加到集群中的最后一个选项 ( tar -xvfSomeFile.tar),而在 GNU 样式的 CLI 中,选项名称必须用空格分隔或使用=分隔符 (--file SomeFile--file=SomeFile) 附加到选项参数。

在我看来,关闭集群选项也会关闭附加的参数值,这似乎很自然。如果有兴趣,可以使用新的解析器配置开关来增强 picocli。

于 2018-09-21T11:49:30.217 回答