(另见 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。