Picocli допускает различную конфигурацию парсера для каждой подкоманды, и то, что вы предлагаете, работает для вашего примера.
В настоящее время нет API-интерфейса для настройки синтаксического анализатора, возможно, будет целесообразно добавить его в будущем выпуске.
Обратите внимание, что настройка конфигурации анализатора с помощью объекта CommandLine
изменит ее для этой команды и ее полной иерархии подкоманд и подкоманд.
Если вы хотите изменить конфигурацию синтаксического анализатора для команды single (без влияния на ее подкоманды), используйте CommandLine.getCommandSpec().parser()
, чтобы получить объект ParserSpec и выполнить настройкуна этом ParserSpec
объекте (пример ниже).
Вопрос не упоминал об этом, но может возникнуть проблема, что в picocli 3.9.x немного неуклюже вызывать программу после настройки с помощью parseWithHandler
метод.Это становится немного лучше с методом execute
, добавленным в picocli 4.0.
Например:
@Command(subcommands = B.class)
class A implements Callable<Integer> {
}
@Command(name = "B")
class B implements Callable<Integer> {
@Command
public int subB(... options) {
}
}
public static void main(String... args) {
CommandLine cmdA = new CommandLine(new A());
// Example 1: configure the B command _and_ its subcommands
cmdA.getSubcommands().get("B").setStopAtPositional(true);
// Example 2: configure the A command _only_ (not the subcommands)
cmdA.getCommandSpec().parser().caseInsensitiveEnumValuesAllowed(true);
// parse input and run the command
int exitCode = cmdA.execute(args);
System.exit(exitCode);
}