Picocli:当不允许簇状短选项时,是否可以将选项附加到参数?



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

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

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

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

-Pmyprop=myvalue

Picocli 有一个选项,可以使用CommandLine.setPosixClusteredShortOptionsAllowed(false)关闭集群短选项。

但是,在该配置中,当选项值附加到选项名称时,将不再识别选项。上面的示例-Pmyprop=myvalue失败,并出现异常:

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

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

-P myprop=myvalue // this works

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

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

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

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

最新更新