picocli, un poderoso framework para la creación de aplicaciones de línea de comandos
Si estás iniciando en el mundo de la programación y ya te has adentrado un poco en Java, dejame decirte que navegando por la red me he encontrado con una excelente herramienta que en mi época de estudiante me hubiera gustado conocer, ya que esta herramienta de la que hablaremos el día de hoy se posiciona como framework para la creación de aplicaciones de línea de comandos.
La herramienta de la que hablaremos es Picocli, la cual pretende ser la forma más fácil de usar para crear aplicaciones de línea de comandos enriquecidas que puedan ejecutarse dentro y fuera de la JVM.
Aunque no hace falta explicar un poco sobre lo que es la interfaz de línea de comandos, para aquellos lectores que no se han adentrado de lleno en la programación o incluso para aquellos que solo lo han hecho de manera autodidacta y desconocen aún de varios términos, les puedo decir que la línea de comandos o mejor conocido como CLI, es un tipo de interfaz de usuario que permite a los usuarios dar instrucciones a algún programa por medio de una línea de texto simple (algo que hacemos a diario en Linux).
Las CLI pueden emplearse interactivamente, escribiendo instrucciones en alguna especie de entrada de texto, o pueden utilizarse de una forma mucho más automatizada (batch), leyendo órdenes desde un archivo de scripts.
Aquí es donde entra Picocli, la cual es una biblioteca y un Framework escrito en Java, que contienen una API de anotaciones y una API programática.
De las características de Picocli, se destaca que:
- Cuenta con ayuda de uso con colores y estilos ANSI
- Autocompletado TAB
- Subcomandos anidados.
- Admite subcomandos similares a git y cualquier estilo de prefijo de opción
- Permite opciones cortas agrupadas de estilo POSIX
- Convertidores de tipos personalizados
- opciones de contraseña
- Las aplicaciones de Picocli pueden compilarse en un solo archivo
- Ser muy compactas sin código repetitivo
- Viene con un procesador de anotaciones que activa Graal
- Soporte para opciones negables
- Valores cotizados avanzados y grupos de argumentos
- Facilita el seguimiento de las pautas de la interfaz de línea de comandos.
- Y más
Lo interesante de Picocli es que como ya se menciono en sus características es que ofrece una manera de permitir que los usuarios ejecuten aplicaciones basadas en picocli sin requerir la biblioteca picocli como una dependencia externa: todo el código fuente vive en un solo archivo.
Se menciona que:
Las aplicaciones basadas en Picocli se pueden compilar con anticipación en una imagen nativa, con un tiempo de inicio extremadamente rápido y requisitos de memoria más bajos.
Sobre el funcionamiento de picocli, este inicializa la clase desde los argumentos de la línea de comando, convirtiendo la entrada en datos fuertemente tipados.
Picocli distingue entre opciones con nombre y parámetros posicionales y permite que ambos estén fuertemente tipados . Los campos de valores múltiples pueden especificar un número exacto de parámetros o un rango (p. ej., 0..*, 1..2).
Admite opciones de mapa como -Dkey1=val1 -Dkey2=val2, donde tanto la clave como el valor se pueden escribir de forma segura. El rastreo del analizador facilita la resolución de problemas. Los archivos de argumentos de la línea de comandos (@-files) permiten que las aplicaciones manejen líneas de comandos muy largas.
Cabe mencionar que el autocompletado de picocli solo funciona en algunos shells tales como Bash o Zsh, ya que no todos admiten esta función.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.
¿Como implementar picocli?
Para los interesados en poder implementar picocli en su proyecto o iniciar un proyecto nuevo con picocli, pueden hacerlo descargando la última versión de picocli desde el siguiente enlace.
Y la implementación la puede realizar según sea el caso, por ejemplo en Maven
<dependency> <groupId>info.picocli</groupId> <artifactId>picocli</artifactId> <version>4.7.4</version> </dependency>
Scala SBT
libraryDependencies += "info.picocli" % "picocli" % "4.7.4"
Ivy
<dependency org="info.picocli" name="picocli" rev="4.7.4" />
Grape
@Grapes( @Grab(group='info.picocli', module='picocli', version='4.7.4') )
Leiningen
[info.picocli/picocli "4.7.4"]
Buildr
'info.picocli:picocli:jar:4.7.4'
JBang
//DEPS info.picocli:picocli:4.7.4
La documentación asi como toda su información, la pueden consultar desde el siguiente enlace.