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

Это ожидаемое поведение? ИМО, параметры карты отличаются от других параметров, и было бы полезно иметь поддержку первого, даже если группированные короткие параметры не разрешены.


person Remko Popma    schedule 21.09.2018    source источник


Ответы (1)


Да, в Picocli 3.6 и более ранних версиях это ожидаемое поведение.

POSIX допускает присоединение значения параметра параметра к последнему параметру в кластере (tar -xvfSomeFile.tar), в то время как в интерфейсе командной строки в стиле GNU имя параметра должно быть либо разделено пробелом, либо присоединено к параметру параметра с символом-разделителем = (--file SomeFile или --file=SomeFile). ).

Мне казалось естественным, что отключение кластеризованных опций также отключило значения прикрепленных параметров. Если есть интерес, picocli можно улучшить с помощью нового переключателя конфигурации синтаксического анализатора.

person Remko Popma    schedule 21.09.2018