Interfaces de línea de comandos Java: picocli

Hola a todos!

El próximo comienzo del grupo de Desarrolladores Java , en el que todos continuamos nuestro experimento del hecho de que el proceso de aprendizaje no tiene que ser continuo ("¿Debería ser continua la controversión?"). Es decir, reelaboramos un poco y barajamos el programa, y ​​lo dividimos en tres pasos, que se pueden pasar fácilmente con un descanso entre ellos. En general, es interesante tanto para los estudiantes como para nosotros, si solo nadie estuviera húmedo, de lo contrario, el programa incluso parecería ser un poco más complicado, aunque antes no era fácil. Bueno, un artículo tradicionalmente interesante relacionado con nuestro curso.

Vamos!



En el sitio web oficial, picocli se describe como "una poderosa interfaz de línea de comando pequeña", que "es un marco Java de un solo archivo para analizar argumentos de línea de comando y crear mensajes auxiliares perfectos y fácilmente personalizables. Con flores ". Esta publicación proporciona una breve descripción de Picocli 0.9.7 y su uso para analizar argumentos de línea de comandos en código Java.

Al igual que las otras bibliotecas de procesamiento de línea de comandos Java descritas en esta serie, picocli es de código abierto . Dado que todo picocli se implementa en un solo archivo Java , puede usar fácilmente el código fuente directamente si lo desea. El sitio picocli enfatiza que "la característica distintiva de picocli es que permite a los usuarios ejecutar aplicaciones que usan picocli sin requerir picocli como dependencia externa: todo el código fuente se encuentra en un archivo para alentar a los autores de aplicaciones a incluirlo en el código fuente del programa" . Si usted prefiere utilizar picocli como una biblioteca, en el repositorio de Maven tiene un JAR-archivo con el conjunto de archivos .class compilados (picocli representa un archivo Java, pero contiene numerosas subclases y anotación s).

La forma más fácil de hacerse una idea de la naturaleza de archivo único de Picocli es echar un vistazo al archivo en sí. El código fuente de CommandLine.java está disponible en la página de descarga de Picocli . Las siguientes dos capturas de pantalla muestran el resultado de javap al ejecutar la clase CommandLine y al ejecutar una de sus anotaciones internas y una de sus clases internas.





Independientemente de si estamos compilando CommandLine.java en nuestro propio archivo class / JAR o usando un JAR ya construido de Maven, el código fuente de la aplicación que usa Picocli obviamente será el mismo. La fase de "determinación" en el análisis de argumentos usando Picocli se logra anotando los campos de la instancia que almacenará los valores asociados con los parámetros de la línea de comandos. Esto se muestra en el fragmento de código a continuación.

Etapa de "definición" de Picocli
/*     Java   picocli. */ @Command( name="Main", description="Demonstrating picocli", headerHeading="Demonstration Usage:%n%n") public class Main { @Option(names={"-v", "--verbose"}, description="Verbose output?") private boolean verbose; @Option(names={"-f", "--file"}, description="Path and name of file", required=true) private String fileName; @Option(names={"-h", "--help"}, description="Display help/usage.", help=true) boolean help; 

El ejemplo de código anterior demuestra que Picocli le permite especificar varios nombres de marca (en mi ejemplo, nombres de un solo carácter con un guión y nombres de varios caracteres con dos guiones). Este ejemplo también muestra que required = true se puede configurar para los parámetros requeridos, y help = true se puede especificar para opciones auxiliares como imprimir detalles de uso y eliminar errores relacionados con la ausencia de parámetros requeridos. Tenga en cuenta que Picocli 0.9.8 agrega soporte adicional para los tipos de mensajes auxiliares más específicos versionHelp y useHelp .

La etapa de "análisis" en Picocli se realiza en CommandLine.populateCommand (T, String ...) , donde T es una instancia de la clase con campos anotados en Picocli, y las líneas restantes son los argumentos que deben analizarse. Esto se muestra en el siguiente fragmento de código.
Fase de análisis de Picocli

 final Main main = CommandLine.populateCommand(new Main(), arguments); 

La etapa de "sondeo" en Picocli consiste simplemente en acceder a los campos anotados en Picocli de la instancia que se pasaron al método CommandLine.populateCommand (T, String ...) en la etapa de "análisis". Un ejemplo simple de tal "encuesta" se muestra en la siguiente lista.

Fase de Encuesta Picocli

 out.println( "The provided file path and name is " + main.fileName + " and verbosity is set to " + main.verbose); 

Mostrar mensajes auxiliares o información de uso al usuario cuando se especifica -h o --help en la línea de comando es tan simple como "sondear" un campo anotado en Picocli para el que se especificó help = true para determinar si se estableció este valor booleano o no y, si está instalado, llame a uno de los métodos de CommandLine.usage sobrecargados. Tuve que usar una de las versiones estáticas de este método, como se muestra en la siguiente lista.

Mensajes de soporte / información de uso en Picocli

 if (main.help) { CommandLine.usage(main, out, CommandLine.Help.Ansi.AUTO); } 

Las siguientes capturas de pantalla demuestran una aplicación simple escrita con picocli. La primera captura de pantalla muestra el tipo de mensaje de error y el seguimiento de la pila si falta el indicador requerido. La segunda captura de pantalla muestra cómo se usan los nombres largos y cortos especificados en las anotaciones. La tercera imagen muestra la función de mostrar mensajes auxiliares en acción.





Una de las características adicionales de Picocli, que no está disponible en muchas otras bibliotecas de análisis de argumentos de línea de comandos de Java, es la compatibilidad con la sintaxis de color a. La primera lista de esta publicación tenía líneas definidas en anotaciones con @ | El | @ sintaxis. En la captura de pantalla anterior, que demuestra el uso de mensajes auxiliares, estos caracteres se transmitieron tal cual, sin un procesamiento especial. Sin embargo, si ejecuto este código de muestra en Cygwin, veré qué hacen estos signos.



En la captura de pantalla anterior, vemos que Picocli aplicó automáticamente la sintaxis de color (amarillo y blanco) a las opciones de mensajes auxiliares y también aplicó sintaxis en negrita y subrayado en negrita a las áreas con la descripción de mensajes auxiliares donde se aplicó la sintaxis @ | El | @.

Las siguientes son características adicionales de Picocli a tener en cuenta al elegir un marco o biblioteca para ayudar a analizar argumentos de línea de comandos en Java.

  • Picocli es un proyecto de código abierto con licencia de Apache 2.0.
  • Picocli no requiere descargar bibliotecas o marcos de terceros.
  • Todo el código fuente de Picocli está contenido en un único archivo .java, y este código puede copiarse y pegarse en su propio sistema de gestión de configuración y compilarse con el resto del código de la aplicación, lo que significa que incluso el archivo JAR de Picocli no es necesario.
  • El archivo fuente CommandLine.java (Picocli 0.9.7) tiene poco más de 3.700 líneas (incluidos espacios y comentarios) y pesa casi 200 KB. El archivo picocli-0.9.7.jar pesa alrededor de 83 KB.
  • Picocli es puntual y se actualiza con frecuencia. La versión 0.9.8 se lanzó ayer (después de que escribí la mayor parte de esta publicación).
  • Picocli tiene documentación muy detallada y, en muchos sentidos, está más actualizada que la documentación de algunas otras bibliotecas de procesamiento de línea de comandos de Java.
  • El soporte de sintaxis de color de Picocli es fácil de usar, y la ayuda para usar la sintaxis de color en todas las plataformas se documenta en la sección Plataformas compatibles .
  • El uso de anotaciones de Picocli para campos de nivel de instancia es similar al uso de anotaciones en algunas otras bibliotecas de procesamiento de línea de comandos y tiene los mismos beneficios.
  • Las características principales de Picocli son muy convenientes y fáciles de aprender, pero Picocli también admite la capacidad de configurar varios aspectos del procesamiento de línea de comandos utilizando Picocli.

Los listados en esta publicación están completamente disponibles en GitHub .

Picocli es una biblioteca compatible y actualizada para analizar argumentos de línea de comandos Java. Contiene varias características y enfoques nuevos de algunas otras bibliotecas de procesamiento de línea de comandos disponibles escritas en Java, pero se le han agregado un par de características diferentes (como la sintaxis de color y toda la biblioteca encapsulada en un archivo Java de origen). Picocli es bastante fácil de usar y atractivo en sí mismo, pero lo más probable es que se destaque entre otras bibliotecas para un desarrollador individual si este desarrollador desea admitir la sintaxis de color o la capacidad de agregar un archivo de código fuente al proyecto del desarrollador sin archivos JAR adicionales o compilados. archivos de clase

El fin

Como siempre, esperamos sus preguntas y comentarios.

Source: https://habr.com/ru/post/es419401/


All Articles