Я пытаюсь реализовать свой собственный CLI и хочу использовать picocli для анализа аргументов моих команд.Вот почему я не хочу, чтобы Picocli писал в консоли вообще.Поэтому я создал класс MyCommand
с некоторыми комментариями к параметрам и параметрам.Теперь я хочу иметь возможность сделать что-то вроде этого:
val myCommand = CommandLine.populateCommand(MyCommand(), args)
myCommand.execute();
val output = myCommand.getOutput();
val errors: List<String> = myCommand.getErrors();
Нет проблем с первыми тремя строками, но я не уверен, как поступить с четвертой.Теперь populateCommand
просто генерирует все исключения, и перехватывать их нельзя, потому что выброшенное исключение остановит мои вычисления конвейера.В документации Picocli предлагается использовать снисходительный режим синтаксического анализа для исключений, которые должны храниться в ParseResult
, но это означает, что мне нужно использовать метод commandLine.parseWithHandlers
, который сложно использовать для моих нужд.
Я что-то упустил?Может быть, я могу использовать populateCommand
и хранить исключение в каком-то месте?
Вот трассировка стека для одного из исключений, которые populateCommand
выдает:
Exception in thread "main" picocli.CommandLine$MissingParameterException: Missing required parameter for option '-A' (<afterContext>)
at picocli.CommandLine$Interpreter.assertNoMissingParameters(CommandLine.java:8059)
at picocli.CommandLine$Interpreter.applyOption(CommandLine.java:7534)
at picocli.CommandLine$Interpreter.processStandaloneOption(CommandLine.java:7446)
at picocli.CommandLine$Interpreter.processArguments(CommandLine.java:7355)
at picocli.CommandLine$Interpreter.parse(CommandLine.java:7226)
at picocli.CommandLine$Interpreter.parse(CommandLine.java:7116)
at picocli.CommandLine.parse(CommandLine.java:824)
at picocli.CommandLine.populateCommand(CommandLine.java:777)