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, параметры карты отличаются от других параметров, и было бы полезно иметь поддержку первых, даже если кластерные короткие параметры не разрешены.
1 ответ
Да, в picocli 3.6 и ранее это ожидаемое поведение.
POSIX допускает добавление значения параметра опции к последнему параметру в кластере (tar -xvfSomeFile.tar
), в то время как в CLI в стиле GNU имя опции должно быть либо разделено пробелом, либо присоединено к параметру опции с помощью =
разделитель символов (--file SomeFile
или же --file=SomeFile
).
Мне казалось естественным, что отключение кластерных опций также приведет к отключению подключенных значений параметров. Если есть интерес, Picocli может быть улучшен с помощью нового переключателя конфигурации анализатора.