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 может быть улучшен с помощью нового переключателя конфигурации анализатора.

Другие вопросы по тегам