Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

214
Vistas
¿Cómo puedo manejar los errores en picocli?

Intento implementar mi propia CLI y quiero usar picocli para analizar los argumentos de mis comandos. Es por eso que no quiero que picocli escriba en la consola. Así que creé la clase MyCommand con algunas opciones y anotaciones de parámetros. Ahora quiero ser capaz de hacer algo como esto:

 val myCommand = CommandLine.populateCommand(MyCommand(), args) myCommand.execute(); val output = myCommand.getOutput(); val errors: List<String> = myCommand.getErrors();

No hay problemas con las primeras tres líneas, pero no estoy seguro de cómo lidiar con la cuarta. Ahora, populateCommand simplemente lanza todas las excepciones, y atraparlas no es una opción, porque la excepción lanzada detendrá los cálculos de mi canalización. La documentación de Picocli sugiere usar el modo indulgente del analizador para que las excepciones se almacenen en ParseResult , pero significa que tengo que usar el método commandLine.parseWithHandlers que es difícil de usar para mis necesidades.
¿Me estoy perdiendo de algo? ¿Quizás aún pueda usar populateCommand y tener una excepción almacenada en algún lugar?
Aquí está el seguimiento de la pila para una de las excepciones que arroja el comando 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)
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Ignorar los errores de análisis es inusual, pero puede ser útil al crear su propia consola CLI interactiva , a diferencia de un solo comando. Mi respuesta asume que esto es lo que tienes en mente.

Una idea es utilizar el método parseArgs en lugar del método populateCommand . Este método devuelve un ParseResult desde el cual puede obtener los errores que encontró picocli durante el análisis, si configuró el analizador para que sea indulgente.

Por ejemplo:

 val myCommand = MyCommand(); val commandLine = CommandLine(myCommand); // tell parser to be lenient commandLine.getCommandSpec().parser().collectErrors(true); // parse user input, query result for errors val parseResult = commandLine.parseArgs(args); val parseErrors: List<Exception> = parseResult.errors(); // ignoring the errors for now... myCommand.execute(); val output = myCommand.getOutput(); val appErrors: List<String> = myCommand.getErrors();

Tenga en cuenta que si hay algún error de análisis, esto significa que el usuario especificó una entrada no válida. Como resultado, es posible que su comando no se haya inicializado correctamente. El método de execute debe ser más robusto para manejar opciones/parámetros posicionales parcialmente inicializados.

SUGERENCIA: si está creando su propia consola CLI interactiva (a diferencia de un solo comando), puede estar interesado en JLine 2 (requiere Java 5 o superior) o JLine 3 (requiere Java 8 o superior). Picocli proporciona módulos picocli-shell-jline2 y picocli-shell-jline3 que tienen un PicocliJLineCompleter que muestra candidatos de finalización sensibles al contexto para los comandos de picocli. (El archivo Léame de cada módulo tiene un ejemplo). Las aplicaciones que usan picocli para definir sus comandos ya no necesitan codificar a mano Completers para sus comandos y opciones. (Una versión anterior de esto se usa en Micronaut CLI ).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda