Picocli: Можно ли добавить параметр к параметру, когда кластерные короткие параметры запрещены? - PullRequest
0 голосов
/ 21 сентября 2018

( См. Также 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 Ответ

0 голосов
/ 21 сентября 2018

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

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

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

...