picocli: una pequeña y poderosa interfaz de línea de comandos
Picocli 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. ¿Considerando picocli? Mira lo que dicen los usuarios satisfechos sobre picocli.
Picocli es una biblioteca y un marco moderno, escrito en Java, que contiene una API de anotaciones y una API programática. Incluye ayuda de uso con colores y estilos ANSI, autocompletado TAB y subcomandos anidados. En un único archivo, para que puedas incluirlo en formato fuente . Esto permite a los usuarios ejecutar aplicaciones basadas en picocli sin necesidad de picocli como dependencia externa.
Las aplicaciones basadas en Picocli se pueden compilar con anticipación en una imagen nativa, con un tiempo de inicio extremadamente rápido y menores requisitos de memoria, que se pueden distribuir como un único archivo ejecutable. Picocli viene con un procesador de anotaciones que automáticamente habilita Graal su jar durante la compilación.
Las aplicaciones Picocli pueden ser muy compactas sin código repetitivo: su comando (o subcomando) se puede ejecutar con una sola línea de código. Simplemente implemente Runnable
o Callable
, o coloque la lógica empresarial de su comando en un método anotado @Command
.
Picocli facilita el seguimiento de las pautas de la interfaz de línea de comandos.
Cómo funciona: anota tu clase y picocli la inicializa desde los argumentos de la línea de comando, convirtiendo la entrada en datos fuertemente tipados. Admite subcomandos tipo git (y subcomandos anidados), cualquier estilo de prefijo de opción, opciones cortas agrupadas estilo POSIX, convertidores de tipos personalizados, opciones de contraseña y más.
Picocli distingue entre opciones con nombre y parámetros posicionales y permite que ambos sean fuertemente tipados. Los campos de valores múltiples pueden especificar un número exacto de parámetros o un rango (por ejemplo, 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 seguimiento del analizador facilita la resolución de problemas. Los archivos de argumentos de línea de comandos (@-files) permiten que las aplicaciones manejen líneas de comandos muy largas.
Genera ayuda de uso y de versión pulida y fácilmente personalizada, utilizando colores ANSI siempre que sea posible. Requiere como mínimo Java 5, pero está diseñado para facilitar el uso de lambdas de Java 8. Probado en todas las versiones de Java entre 5 y 18 ea (inclusive).
Las aplicaciones de línea de comandos basadas en Picocli pueden tener autocompletado TAB, mostrando interactivamente a los usuarios qué opciones y subcomandos están disponibles. Cuando una opción tiene completionCandidates
o tiene un tipo enum
, el autocompletado también puede sugerir valores de opción. Picocli puede generar scripts de finalización para bash y zsh, y ofrece módulos picocli-shell-jline2
y picocli-shell-jline3
con implementaciones JLine Completer
para crear aplicaciones de shell interactivas.
Las características únicas de picocli incluyen soporte para opciones negables, valores cotizados avanzados y grupos de argumentos. Los grupos de argumentos se pueden utilizar para crear opciones mutuamente excluyentes, opciones mutuamente dependientes, secciones de opciones en el mensaje de ayuda de uso y argumentos compuestos repetidos como ([-a=<a> -b=<b> -c=<c>] (-x | -y | -z))...
. Para casos de uso avanzado, las aplicaciones pueden acceder al modelo de objetos de comando picocli con la anotación @Spec
e implementar un procesamiento de parámetros personalizado para los parámetros de opciones si la lógica integrada es insuficiente.
Las aplicaciones basadas en Picocli se pueden integrar fácilmente con contenedores de inyección de dependencia. El marco de microservicios Micronaut tiene soporte integrado para picocli. Quarkus tiene un modo de comando con extensión Picocli para facilitar la creación de aplicaciones CLI basadas en picocli con Quarkus. Picocli se entrega con un módulo picocli-spring-boot-starter
que incluye una configuración automática PicocliSpringFactory
y Spring Boot para usar la inyección de dependencia Spring en su aplicación de línea de comandos picocli. El manual de usuario tiene ejemplos de integración con Guice, Spring Boot, Micronaut, Quarkus y con contenedores que cumplen con la especificación CDI 2.0 (JSR 365).
Lanzamientos
- Todos los lanzamientos
- Lo último: Notas de la versión 4.7.6
- Más antiguo: Notas de la versión Picocli 4.0
- Más antiguo: Notas de la versión Picocli 3.0
- Más antiguo: Notas de la versión Picocli 2.0
Documentación
- 4.x Manual de usuario: https://picocli.info
- Guía rápida 4.x
- Javadoc API 4.x
- VISTA PREVIA: Javadoc modular para todos los artefactos (4.7.6-SNAPSHOT)
- Autocompletado de línea de comando
- API programática
- Preguntas frecuentes
- Compilación de GraalVM AOT a imagen nativa
Más viejo
3.x Manual de usuario Guía rápida 3.x Javadoc API 3.x 2.x Manual de usuario Javadoc API 2.x 1.x Manual de usuario
Artículos y presentaciones
Inglés
- 6 cosas que puedes hacer con JBang pero no con Shell (28/02/2022) por F.Marchioni.
- [VÍDEO] ¡Kotlin, CLI y StarWars! - Una introducción a la creación de aplicaciones CLI con Kotlin usando Picocli (05/02/2022) por Julien Lengrand-Lambert.
- [VIDEO] Autocompletar CLI de Java usando Picocli (24 de enero de 2022) por raksrahul.
- Picocli: facilidad para argumentos CLI en Java (27/10/2021) por agamboa.
- Creación de interfaces de línea de comandos con Kotlin utilizando picoCLI (23 de septiembre de 2021) por Julien Lengrand-Lambert.
- [VIDEO] Cree aplicaciones Java CLI con picocli (2021-09-14) por coder4life.
- PICOCLI (30/06/2021) de Sybren Boland.
- Picoclí | Cree su primera aplicación Kotlin /JVM CLI con GraalVM (2021-02-13) por manserpatrice.
- [VIDEO] Creación de complementos de kubectl con Quarkus, picocli, fabric8io y jbang (22/01/2021) por Sébastien Blanc.
- [VIDEO] J-Fall Virtual 2020: Julien Lengrand: una introducción a la creación de aplicaciones CLI utilizando picoCLI (2020-12-07) por Julien Lengrand-Lambert. ¡Esta fue la charla mejor valorada del @nljug #jfall virtual 2020! ¡Felicidades, Julián!
- Paginar da como resultado una aplicación de línea de comandos usando picoCLI (2020-11-17) por Julien Lengrand-Lambert.
- Aplicaciones CLI con imagen nativa de GraalVM (13 de noviembre de 2020) por Oleg Šelajev.
- Subcomandos de Picocli: un programa, muchos propósitos (22 de septiembre de 2020) por Jonas Andersen.
- CLI nativa con Picocli y GraalVM (2020-08-20) por jbebar.
- Cómo crear una aplicación CLI en Java usando jbang y picocli (13 de agosto de 2020) por Matthew Gilliard.
- Construyendo un raspador de dependientes de GitHub con Quarkus y Picocli (31 de julio de 2020) por Marc Nuri.
- Construyendo una CLI Java decente (27/07/2020) por Andreas Textor.
- [VIDEO] (Otro video muy bien producido por Szymon Stepniak) Implementación de OAuth 2.0 en una aplicación de línea de comandos Java usando Micronaut, Picocli y GraalVM (23/07/2020) por Szymon Stepniak (canal de YouTube).
- Micronaut, Picocli y GraalVM (8 de julio de 2020) por Szymon Stepniak.
- [VIDEO] (¡Extremadamente bien producido e informativo, recomendado!) Creación de una aplicación de línea de comandos con Java 11, Micronaut, Picocli y GraalVM (2020-07-01) por Szymon Stepniak (canal de YouTube).
- [AUDIO] Scala Valentines #2 (2020-06-21) Podcast habla sobre picocli (desde las 18:11).
- ¿Cómo crear una herramienta de línea de comandos usando Java? (18 de junio de 2020) por Vijay SRJ.
- Herramientas de línea de comandos con Quarkus y Picocli (08/06/2020) por Dmytro Chaban.
- Guía de Quarkus para el modo de comando Quarkus con picocli, gracias a una extensión picocli de Michał Górniewski incluida en Quarkus 1.5 (2020-06-03).
- Imágenes nativas con Micronaut y GraalVM (01/06/2020) por Λ: Olivier Revial.
- Aplicaciones CLI con Micronaut y Picocli (01/06/2020) por Λ: Olivier Revial.
- Introducción a Picocli: análisis moderno de la línea de comandos de Java (19 de mayo de 2020) por Jonas Andersen.
- Creación de CLI nativa de Covid19 Tracker utilizando Java, PicoCLI y GraalVM (11 de mayo de 2020) por Mohammed Aboullaite.
- Modo Quarkus Command con Picocli (27-04-2020) de Dmytro Chaban.
- Creación de herramientas CLI con Scala, Picocli y GraalVM (09/03/2020) por Naoki Takezoe
- Creación de CLI de Java nativas con GraalVM, Picocli y Gradle (8 de marzo de 2020) por Mitch Seymour
- Cree excelentes aplicaciones CLI nativas en Java con Graalvm y Picocli (07/03/2020)
- Picocli Structured Objects (10 de septiembre de 2019) de Philipp Hanslovsky explica cómo utilizar el soporte de picocli para repetir grupos de argumentos para agregar o configurar objetos estructurados desde la línea de comandos.
- Cree un programa de línea de comandos Java con Picocli|Baeldung (7 de mayo de 2019) por François Dupire.
- Un recorrido relámpago por la revista picocli JAX "Poniendo el foco en las herramientas Java" (8 de abril de 2019).
- Introducción a PicoCLI (10 de febrero de 2019) por devop.
- La guía Corda CLI UX (experiencia de usuario) (2018 de R3 Limited) brinda consejos útiles.
- Desarrolle una herramienta CLI utilizando scripts geniales (26 de octubre de 2018) por Chinthaka Dinadasa.
- Migrando de Commons CLI a picocli. ¡No te arrepentirás! :-) (también en: DZone y Java Code Geeks).
- Renovación de Groovy 2.5 CliBuilder (también en blogs.apache.org). En dos partes: Parte 1 (también en: DZone, Java Code Geeks), Parte 2 (también en: DZone, Java Code Geeks).
- Manual de usuario de Micronaut para ejecutar microservicios de forma independiente con picocli.
- Interfaces de línea de comandos de Java (Parte 30): Observaciones de Dustin Marx sobre picocli 2.0.1 (también en: DZone, Java Code Geeks)
- Interfaces de línea de comandos de Java (Parte 10): Picocli de Dustin Marx sobre picocli 0.9.7 (también en: DZone, Java Code Geeks)
- Picocli 2.0: Groovy Scripts con esteroides (también en: DZone, Java Code Geeks)
- Picocli 2.0: Haga más con menos (también en: DZone, Java Code Geeks)
- Anunciando picocli 1.0 (también en: DZone)
ruso
- Выбор необходимых опций Picocli на основе основного варианта (2020-05-07)
- Интерфейсы командной строки Java: picocli (6 de agosto de 2018): traducción al ruso de MaxRokatansky de la publicación del blog de Dustin Marx.
Español
- picocli, un poderoso framework para la creación de aplicaciones de línea de comandos (2023-09-09) por Darkcrizt
- picocli, un poderoso framework para la creación de aplicaciones de línea de comandos (2023-09-09) por Darkcrizt
- Quarkus + Picocli: Web scaper para extraer proyectos dependientes en GitHub (2020-08-15) por Marc Nuri.
- Quarkus - Introducción: picocli (2020-06-15) de Gerardo Arroyo.
- [VIDEO] Picocli - Ejemplo de Spring Boot (24-05-2020) Introducción rápida de 7 minutos por Gonzalo H. Mendoza.
francés
- Aplicación móvil: Creación de excelentes aplicaciones CLI nativas en Java con Graalvm y Picocli (2020-05-07) Traducción de Build Great Native CLI Apps en Java con Graalvm y Picocli por bouf1450.
- [VÍDEO] Des application en ligne de commande avec Picocli et GraalVM (N. Peters) (07-05-2019): presentación de 15 minutos de Nicolas Peters durante Devoxx FR. Las diapositivas de presentación están disponibles en GitHub.
portugués
- Desenvolva aplicações CLI nativas em Java con Graalvm e Picocli (28/08/2020): Traducción al portugués de Build Great Native CLI Apps en Java con Graalvm y Picocli, gracias a Rodrigo Ap G Batista.
- [VÍDEO] Quarkus #40: Command Mode com Picocli (23-06-2020): Presentación de 13 minutos a cargo de Vinícius Ferraz (@viniciusfcf).
日本語
- Aplicaciones CLI con GraalVM Native Image (21/11/2020) traducción de Logico_jp de la publicación de Oleg Šelajev.
- Picocli + Kotlin + complemento graalvm-native-image でネイティブツールを作る (2020-04-24) publicación de blog de mike-neck (引きこもり持田 en Twitter).
- pythonのArgumentParserような使い心地!picocliのご紹介 (2020-04-15) por @astamuseLab
- Javaのコマンドラインアプリケーション向けのフレームワーク、picocliで遊ぶ (2020-03-07) publicación de blog deかずひら.
- KuromojiのCLIコマンドとpicocliとGraalVM (2020-02-28) publicación de blog de @johtani.
- GraalVM, PicocliとJavaでときめくネイティブコマンドラインアプリを作ろう (2019-11-23) Diapositivas para mi presentación en el JJUG CCC del Japan Java User Group Conferencia de otoño de 2019.
- Picocliを使用してJavaコマンドラインプログラムを作成する - 開発者ドキュメント (2019-10-18)
- GraalVM と Picocliで Javaのネイティブコマンドラインアプリを作ろう (2019-09-06) Diapositivas para mi presentación de charla relámpago en 【東京】JJUGナイトセミナー: ビール片手にLT大会 9/6(金)
- Picocli+Spring Boot でコマンドラインアプリケーションを作成してみる (2019-07-20) porかんがるーさんの日記.
- GraalVM の imagen nativa を使って Java で爆速 Lambda の夢を見る (2019-05-02) por @kencharos
中文
- Java命令行界面(第10部分):picocli (2020-06-07) traducción de dnc8371.
- 如何借助 Graalvm 和 Picocli 构建 Java 编写的原生 CLI 应用 (2020-03-26): traducción al chino de Build Great Native CLI Apps en Java con Graalvm y Picocli, gracias a 张卫滨.
- 从Commons CLI迁移到Picocli (2019-03-13): traducción al chino de Migración de Commons CLI a picocli, gracias a genghaihua.
- Picocli 2.0: Esteroides de Groovy
- Picocli 2.0: 以少求多
Lista de correo
Únase al grupo de Google de picocli si está interesado en discutir cualquier tema relacionado con picocli y recibir anuncios sobre nuevos lanzamientos.
Crédito
¡Reallinfo diseñó el logo de picocli! ¡Muchas gracias!
Compromisos
Este proyecto sigue el control de versiones semántico y se adhiere al Compromiso Cero Errores . |
---|
Adopción
- Picocli ahora es parte de Groovy. A partir de Groovy 2.5, todas las herramientas de línea de comandos de Groovy están basadas en picocli, y picocli es el analizador subyacente de CliBuilder DSL de Groovy.
- Picocli ahora es parte de Micronaut. La CLI de Micronaut se ha reescrito con picocli y Micronaut tiene soporte dedicado para ejecutar microservicios independientes con picocli. Consulte también la Guía Micronaut Picocli.
- Quarkus ahora ofrece el modo Comando con picocli.
- Picocli ahora es parte de JUnit 5. JUnit 5.3 migró su
ConsoleLauncher
de jopt-simple a picocli para admitir @-files (archivos de argumentos); esto ayuda a los usuarios que necesitan especificar muchas pruebas en la línea de comando y encontrarse con limitaciones del sistema. - Debian ahora ofrece un paquete libpicocli-java. Gracias a Miroslav Kravec.
- Picocli se utiliza en el JAR/ejecutable independiente de Intuit Karate.
- Picocli es parte de Ballerina. Ballerina usa picocli para todas sus utilidades de línea de comandos.
- Picocli se utiliza en el JAR/ejecutable independiente CheckStyle de Checkstyle 8.15.
- Picocli está incluido en la lista OpenJDK Quality Outreach de proyectos de software gratuito de código abierto (FOSS) que prueban activamente las compilaciones de OpenJDK.
- Picocli se utiliza en las herramientas de línea de comandos de Apache Hadoop Ozone/HDDS, la CLI de referencia de Apache Hive, Apache Ignite TensorFlow y Apache Sling Feature Model Converter.
- Picocli figura en StackShare. ¡Agréguelo a su pila y agregue/vote las razones por las que le gusta picocli!
- Picocli se utiliza en Pinterest ktlint.
- Picocli se usa en Spring IO nohttp-cli.
- La biblioteca MinecraftPicocli facilita el uso de picocli en Minecraft Forge.
- Simple Java Mail ahora ofrece una CLI basada en picocli.
- jbang no solo usa picocli internamente, sino que también tiene una plantilla CLI para generar un script inicial: use
jbang --init=cli helloworld.java
para generar un script jbang de muestra habilitado para picocli. Ver asciinema. - Picocli es la biblioteca principal utilizada en la plantilla cli-java de CookieTemple para crear ejecutables CLI nativos de GraalVM en Java. Vea esta vista previa.
- Picocli se menciona en las Directrices de la interfaz de línea de comandos.
Me alegra ver que más personas están usando picocli. Algo debemos estar haciendo bien. :-)
Contribuye ayudando a promover picocli
Si te gusta picocli, ayuda a otros a descubrir picocli:
¿Fácil e impactante?
- ¡Dale a picocli una estrella en GitHub!
- Vota a favor de mi respuesta de StackOverflow a "¿Cómo analizo los argumentos de la línea de comandos en Java?"
- Vota a favor de mi respuesta de Quora a "¿Cuál es la mejor manera de analizar argumentos de línea de comandos con Java?"
¡Difunde la alegría! ?
- ¡Tuitea sobre picocli! ¿Qué te gusta de esto? ¿Cómo te ha ayudado? ¿En qué se diferencia de las alternativas?
- Mencione que su proyecto utiliza picocli en la documentación de su proyecto.
- Demuestre que su proyecto GitHub usa picocli, con esta insignia en su archivo README.md:
[![picocli](https://img.shields.io/badge/picocli-4.7.6-green.svg)](https://github.com/remkop/picocli)
¡Predícalo! ?
- Quizás la forma más impactante de mostrarle a la gente cómo picocli puede hacerles la vida más fácil es escribir una publicación de blog o un artículo, ¡o incluso hacer un video!
Ejemplo
Anote los campos con los nombres y la descripción de los parámetros de la línea de comando. Opcionalmente, implemente Runnable
o Callable
para delegar el manejo de errores y las solicitudes de ayuda de uso o ayuda de versión a picocli. Por ejemplo:
import picocli . CommandLine ;
import picocli . CommandLine . Option ;
import picocli . CommandLine . Parameters ;
import java . io . File ;
@ Command ( name = "example" , mixinStandardHelpOptions = true , version = "Picocli example 4.0" )
public class Example implements Runnable {
@ Option ( names = { "-v" , "--verbose" },
description = "Verbose mode. Helpful for troubleshooting. Multiple -v options increase the verbosity." )
private boolean [] verbose = new boolean [ 0 ];
@ Parameters ( arity = "1..*" , paramLabel = "FILE" , description = "File(s) to process." )
private File [] inputFiles ;
public void run () {
if ( verbose . length > 0 ) {
System . out . println ( inputFiles . length + " files to process..." );
}
if ( verbose . length > 1 ) {
for ( File f : inputFiles ) {
System . out . println ( f . getAbsolutePath ());
}
}
}
public static void main ( String [] args ) {
// By implementing Runnable or Callable, parsing, error handling and handling user
// requests for usage help or version help can be done with one line of code.
int exitCode = new CommandLine ( new Example ()). execute ( args );
System . exit ( exitCode );
}
}
Implemente Runnable
o Callable
y su comando se podrá ejecutar en una línea de código. El ejemplo anterior utiliza el método CommandLine.execute
para analizar la línea de comando, manejar errores, manejar solicitudes de uso y ayuda de versión e invocar la lógica empresarial. Las aplicaciones pueden llamar System.exit
con el código de salida devuelto para indicar el éxito o el fracaso a la persona que llama.
$ java Example -v inputFile1 inputFile2
2 files to process...
El método CommandLine.execute
imprime automáticamente el mensaje de ayuda de uso si el usuario solicitó ayuda o cuando la entrada no fue válida.
Esto se puede personalizar de muchas maneras. Consulte la sección del manual del usuario sobre Ejecución de comandos para obtener más detalles.
Ayuda de uso con colores y estilos ANSI
Los colores, estilos, encabezados, pies de página y encabezados de sección se personalizan fácilmente con anotaciones. Por ejemplo:
Ver el código fuente.
API de ayuda de uso
Las anotaciones de Picocli ofrecen muchas formas de personalizar el mensaje de ayuda de uso.
Si las anotaciones no son suficientes, puede utilizar la API de ayuda de picocli para personalizar aún más. Por ejemplo, su aplicación puede generar ayuda como esta con un diseño personalizado:
Ver el código fuente.
Descargar
Puede agregar picocli como una dependencia externa a su proyecto o puede incluirlo como fuente. Ver el código fuente. Cópialo y pégalo en un archivo llamado CommandLine.java
, agrégalo a tu proyecto y ¡disfrútalo!
Gradle
implementation 'info.picocli:picocli:4.7.6'
experto
<dependency>
<groupId>info.picocli</groupId>
<artifactId>picocli</artifactId>
<version>4.7.6</version>
</dependency>
Escala SBT
libraryDependencies += "info.picocli" % "picocli" % "4.7.6"
Hiedra
<dependency org="info.picocli" name="picocli" rev="4.7.6" />
Uva
@Grapes (
@ Grab ( group = ' info.picocli ' , module = ' picocli ' , version = ' 4.7.6 ' )
)
Leiningen
[info.picocli/picocli "4.7.6"]
constructor
'info.picocli:picocli:jar:4.7.6'
JBang
//DEPS info.picocli:picocli:4.7.6