picocli - une puissante petite interface de ligne de commande
Picocli vise à être le moyen le plus simple à utiliser pour créer des applications riches en ligne de commande pouvant s'exécuter sur et hors de la JVM. Vous envisagez des picocli ? Vérifiez ce que les utilisateurs satisfaits disent de picocli.
Picocli est une bibliothèque et un framework modernes, écrits en Java, qui contiennent à la fois une API d'annotations et une API de programmation. Il propose une aide à l'utilisation avec les couleurs et les styles ANSI, la saisie semi-automatique TAB et les sous-commandes imbriquées. Dans un seul fichier, vous pouvez donc l'inclure dans le formulaire source . Cela permet aux utilisateurs d'exécuter des applications basées sur picocli sans avoir besoin de picocli comme dépendance externe.
Les applications basées sur Picocli peuvent être compilées à l'avance en une image native, avec un temps de démarrage extrêmement rapide et des besoins en mémoire réduits, qui peuvent être distribuées sous la forme d'un seul fichier exécutable. Picocli est livré avec un processeur d'annotation qui active automatiquement Graal votre pot lors de la compilation.
Les applications Picocli peuvent être très compactes sans code standard : votre commande (ou sous-commande) peut être exécutée avec une seule ligne de code. Implémentez simplement Runnable
ou Callable
, ou placez la logique métier de votre commande dans une méthode annotée @Command
.
Picocli facilite le suivi des directives de l'interface de ligne de commande.
Comment ça marche : annotez votre classe et picocli l'initialise à partir des arguments de ligne de commande, convertissant l'entrée en données fortement typées. Prend en charge les sous-commandes de type git (et les sous-sous-commandes imbriquées), tout style de préfixe d'option, les options courtes groupées de style POSIX, les convertisseurs de type personnalisés, les options de mot de passe et plus encore.
Picocli fait la distinction entre les options nommées et les paramètres de position et permet aux deux d'être fortement typés. Les champs à valeurs multiples peuvent spécifier un nombre exact de paramètres ou une plage (par exemple, 0..*
, 1..2
). Prend en charge les options de carte telles que -Dkey1=val1 -Dkey2=val2
, où la clé et la valeur peuvent être fortement typées. Le traçage de l'analyseur facilite le dépannage. Les fichiers d'arguments de ligne de commande (@-files) permettent aux applications de gérer de très longues lignes de commande.
Génère une aide à l'utilisation et une aide à la version raffinées et faciles à personnaliser, en utilisant les couleurs ANSI lorsque cela est possible. Nécessite au minimum Java 5, mais est conçu pour faciliter l'utilisation des lambdas Java 8. Testé sur toutes les versions Java entre 5 et 18 (inclus).
Les applications de ligne de commande basées sur Picocli peuvent avoir une saisie semi-automatique TAB, montrant de manière interactive aux utilisateurs les options et sous-commandes disponibles. Lorsqu’une option a completionCandidates
ou a un type enum
, la saisie semi-automatique peut également suggérer des valeurs d’option. Picocli peut générer des scripts de complétion pour bash et zsh, et propose les modules picocli-shell-jline2
et picocli-shell-jline3
avec des implémentations JLine Completer
pour créer des applications shell interactives.
Les fonctionnalités uniques de picocli incluent la prise en charge des options négociables, des valeurs citées avancées et des groupes d'arguments. Les groupes d'arguments peuvent être utilisés pour créer des options mutuellement exclusives, des options mutuellement dépendantes, des sections d'options dans le message d'aide à l'utilisation et des arguments composites répétitifs tels que ([-a=<a> -b=<b> -c=<c>] (-x | -y | -z))...
. Pour les cas d'utilisation avancés, les applications peuvent accéder au modèle objet de commande picocli avec l'annotation @Spec
et implémenter un traitement de paramètres personnalisé pour les paramètres d'option si la logique intégrée est insuffisante.
Les applications basées sur Picocli peuvent facilement s'intégrer aux conteneurs d'injection de dépendances. Le framework de microservices Micronaut prend en charge picocli. Quarkus dispose d'un mode de commande avec extension Picocli pour faciliter la création d'applications CLI basées sur picocli avec Quarkus. Picocli est livré avec un module picocli-spring-boot-starter
qui inclut une configuration automatique PicocliSpringFactory
et Spring Boot pour utiliser l'injection de dépendances Spring dans votre application de ligne de commande picocli. Le manuel d'utilisation contient des exemples d'intégration avec Guice, Spring Boot, Micronaut, Quarkus et avec des conteneurs conformes à la spécification CDI 2.0 (JSR 365).
Sorties
- Toutes les versions
- Dernière version : Notes de version 4.7.6
- Ancien : Notes de version de Picocli 4.0
- Ancien : Notes de version de Picocli 3.0
- Ancien : Notes de version de Picocli 2.0
Documentation
- 4.x Manuel d'utilisation : https://picocli.info
- Guide rapide 4.x
- Javadoc API 4.x
- APERÇU : Javadoc modulaire pour tous les artefacts (4.7.6-SNAPSHOT)
- Complétion automatique en ligne de commande
- API programmatique
- FAQ
- Compilation GraalVM AOT en image native
Plus vieux
3.x Manuel d'utilisation Guide rapide 3.x Javadoc API 3.x 2.x Manuel d'utilisation Javadoc API 2.x 1.x Manuel d'utilisation
Articles et présentations
Anglais
- 6 choses que vous pouvez faire avec JBang mais pas avec Shell (2022-02-28) par F.Marchioni.
- [VIDEO]Kotlin, CLI et StarWars ! - Une introduction à la création d'applications CLI avec Kotlin à l'aide de Picocli (05/02/2022) par Julien Lengrand-Lambert.
- [VIDÉO]Complétion automatique de Java CLI à l'aide de Picocli (2022-01-24) par raksrahul.
- Picocli – Facilité pour les arguments CLI en Java (2021-10-27) par agamboa.
- Création d'interfaces de ligne de commande avec Kotlin à l'aide de picoCLI (2021-09-23) par Julien Lengrand-Lambert.
- [VIDEO]Créez des applications Java CLI avec picocli (2021-09-14) par coder4life.
- PICOCLI (30/06/2021) de Sybren Boland.
- Picocli | Créez votre première application CLI Kotlin /JVM avec GraalVM (2021-02-13) par manserpatrice.
- [VIDEO] Construction de plugins kubectl avec Quarkus, picocli, fabric8io et jbang (2021-01-22) par Sébastien Blanc.
- [VIDEO] J-Fall Virtual 2020 : Julien Lengrand - Une introduction à la création d'applications CLI à l'aide de picoCLI (07/12/2020) par Julien Lengrand-Lambert. C'était la conférence la mieux notée pour @nljug #jfall virtual 2020 ! Félicitations, Julien!
- Paginer les résultats dans une application en ligne de commande utilisant picoCLI (2020-11-17) par Julien Lengrand-Lambert.
- Applications CLI avec GraalVM Native Image (2020-11-13) par Oleg Šelajev.
- Sous-commandes Picocli - Un programme, plusieurs objectifs (2020-09-22) par Jonas Andersen.
- CLI native avec Picocli et GraalVM (20/08/2020) par jbebar.
- Comment créer une application CLI en Java à l'aide de jbang et picocli (2020-08-13) par Matthew Gilliard.
- Construire un Scraper de dépendances GitHub avec Quarkus et Picocli (2020-07-31) par Marc Nuri.
- Construire une CLI Java décente (2020-07-27) par Andreas Textor.
- [VIDÉO] (Une autre vidéo très bien produite par Szymon Stepniak) Implémentation d'OAuth 2.0 dans une application en ligne de commande Java utilisant Micronaut, Picocli et GraalVM (23/07/2020) par Szymon Stepniak (chaîne YouTube).
- Micronaut, Picocli et GraalVM (08/07/2020) par Szymon Stepniak.
- [VIDÉO] (Extrêmement bien produit et informatif, recommandé !) Création d'une application en ligne de commande avec Java 11, Micronaut, Picocli et GraalVM (01/07/2020) par Szymon Stepniak (chaîne YouTube).
- [AUDIO] Scala Valentines #2 (2020-06-21) Le podcast parle de picocli (à partir de 18h11).
- Comment créer un outil de ligne de commande en utilisant Java ? (18/06/2020) par Vijay SRJ.
- Outils de ligne de commande avec Quarkus et Picocli (08/06/2020) par Dmytro Chaban.
- Guide Quarkus pour le mode commande Quarkus avec picocli, grâce à une extension picocli de Michał Górniewski incluse dans Quarkus 1.5 (03/06/2020).
- Images natives avec Micronaut et GraalVM (01/06/2020) par Λ : Olivier Revial.
- Applications CLI avec Micronaut et Picocli (01/06/2020) par Λ : Olivier Revial.
- Introduction de Picocli - Analyse de ligne de commande Java moderne (19/05/2020) par Jonas Andersen.
- Création d'une CLI native Covid19 Tracker à l'aide de Java, PicoCLI et GraalVM (2020-05-11) par Mohammed Aboullaite.
- Mode Commande Quarkus avec Picocli (2020-04-27) par Dmytro Chaban.
- Création d'outils CLI avec Scala, Picocli et GraalVM (09/03/2020) par Naoki Takezoe
- Création de CLI Java natives avec GraalVM, Picocli et Gradle (08/03/2020) par Mitch Seymour
- Créez de superbes applications CLI natives en Java avec Graalvm et Picocli (2020-03-07)
- Picocli Structured Objects (2019-09-10) de Philipp Hanslovsky explique comment utiliser la prise en charge de picocli pour les groupes d'arguments répétitifs pour ajouter ou configurer des objets structurés à partir de la ligne de commande.
- Créer un programme Java en ligne de commande avec Picocli|Baeldung (2019-05-07) par François Dupire.
- Une visite éclair de picocli JAX Magazine "Mettre les outils Java à l'honneur" (08/04/2019).
- Une introduction à PicoCLI (2019-02-10) par devop.
- Le guide Corda CLI UX (User Experience) (2018 par R3 Limited) donne des conseils utiles.
- Développer un outil CLI à l'aide de scripts groovy (2018-10-26) par Chinthaka Dinadasa.
- Migration de Commons CLI vers picocli. Vous ne le regretterez pas ! :-) (également sur : DZone et Java Code Geeks).
- Groovy 2.5 Renouvellement de CliBuilder (également sur blogs.apache.org). En deux parties : Partie 1 (également sur : DZone, Java Code Geeks), Partie 2 (également sur : DZone, Java Code Geeks).
- Manuel d'utilisation de Micronaut pour exécuter des microservices de manière autonome avec picocli.
- Interfaces de ligne de commande Java (partie 30) : observations de Dustin Marx à propos de picocli 2.0.1 (également sur : DZone, Java Code Geeks)
- Interfaces de ligne de commande Java (partie 10) : Picocli par Dustin Marx à propos de picocli 0.9.7 (également sur : DZone, Java Code Geeks)
- Picocli 2.0 : Groovy Scripts on Steroids (également sur : DZone, Java Code Geeks)
- Picocli 2.0 : faire plus avec moins (également sur : DZone, Java Code Geeks)
- Annonce de picocli 1.0 (également sur : DZone)
russe
- Découvrez la nouvelle version de Picocli dans la nouvelle version standard (2020-05-07)
- Интерфейсы командной строки Java : picocli (06/08/2018) : traduction russe par MaxRokatansky du billet de blog de Dustin Marx.
espagnol
- picocli, un framework puissant pour la création d'applications de ligne de commandes (2023-09-09) par Darkcrizt
- picocli, un framework puissant pour la création d'applications de ligne de commandes (2023-09-09) par Darkcrizt
- Quarkus + Picocli : Webscaper pour extraire des projets dépendants de GitHub (2020-08-15) par Marc Nuri.
- Quarkus - Introduction: picocli (2020-06-15) par Gerardo Arroyo.
- [VIDÉO] Picocli - Exemple Spring Boot (2020-05-24) Introduction rapide de 7 minutes par Gonzalo H. Mendoza.
Français
- Application mobile : Créez de superbes applications CLI natives en Java avec Graalvm et Picocli (2020-05-07) Traduction de Build Great Native CLI Apps in Java avec Graalvm et Picocli par bouf1450.
- [VIDÉO] Des applications en ligne de commande avec Picocli et GraalVM (N. Peters) (07/05/2019) : présentation de 15 minutes par Nicolas Peters lors de Devoxx FR. Les diapositives de présentation sont disponibles sur GitHub.
Portugais
- Desenvolva aplicações CLI natives em Java com Graalvm e Picocli (2020-08-28) : traduction portugaise de Build Great Native CLI Apps in Java avec Graalvm et Picocli, grâce à Rodrigo Ap G Batista.
- [VIDÉO] Quarkus #40 : Command Mode com Picocli (2020-06-23) : présentation de 13 minutes par Vinícius Ferraz (@viniciusfcf).
日本語
- Applications CLI avec GraalVM Native Image (2020-11-21) traduction par Logico_jp du message d'Oleg Šelajev.
- Picocli + Kotlin + graalvm-native-image plugin でネイティブツールを作る (2020-04-24) article de blog par Mike-neck (引きこもり持田 sur Twitter).
- pythonのArgumentParserような使い心地!picocliのご紹介 (2020-04-15) par @astamuseLab
- Javaのコマンドラインアプリケーション向けのフレームワーク、picocliで遊ぶ (2020-03-07) article de blog parかずひら.
- KuromojiのCLIコマンドとpicocliとGraalVM (2020-02-28) article de blog par @johtani.
- GraalVM, PicocliとJavaでときめくネイティブコマンドラインアプリを作ろう (2019-11-23) Diapositives pour ma présentation au JJUG CCC du Japan Java User Group Conférence d'automne 2019.
- Picocli et Java avec Java - Mise à jour (2019-10-18)
- GraalVM et Picocli avec Java (06/09/2019) Diapositives pour ma présentation éclair au JJUG Article : Photo de LT大会 9/6(金)
- Picocli+Spring Bootかんがるーさんの日記.
- GraalVM avec image native pour Java et Lambda pour (2019-05-02) par @kencharos
Chine
- Java命令行界面(第10部分):picocli (2020-06-07) traduction par dnc8371.
- 如何借助 Graalvm et Picocli 构建 Java 编写的原生 CLI 应用 (2020-03-26) : traduction chinoise de Build Great Native CLI Apps en Java avec Graalvm et Picocli, grâce à 张卫滨.
- 从Commons CLI迁移到Picocli (2019-03-13) : traduction chinoise de la migration de Commons CLI vers picocli, grâce à genghaihua.
- Picocli 2.0 : Stéroïdes sous Groovy
- Picocli 2.0 : version ultérieure
Liste de diffusion
Rejoignez le groupe Google picocli si vous souhaitez discuter de tout ce qui concerne picocli et recevoir des annonces sur les nouvelles versions.
Crédit
Reallinfo a conçu le logo picocli ! Merci beaucoup!
Engagements
Ce projet suit le versioning sémantique et adhère à l' engagement Zero Bugs . |
---|
Adoption
- Picocli fait désormais partie de Groovy. Depuis Groovy 2.5, tous les outils de ligne de commande Groovy sont basés sur picocli, et picocli est l'analyseur sous-jacent du CliBuilder DSL de Groovy.
- Picocli fait désormais partie de Micronaut. La CLI Micronaut a été réécrite avec picocli et Micronaut propose une prise en charge dédiée à l'exécution de microservices de manière autonome avec picocli. Voir également le guide Micronaut Picocli.
- Quarkus propose désormais le mode Commande avec picocli.
- Picocli fait désormais partie de JUnit 5. JUnit 5.3 a migré son
ConsoleLauncher
de jopt-simple vers picocli pour prendre en charge les @-files (fichiers d'arguments) ; cela aide les utilisateurs qui doivent spécifier de nombreux tests sur la ligne de commande et se heurter aux limitations du système. - Debian propose désormais un paquet libpicocli-java. Merci à Miroslav Kraavec.
- Picocli est utilisé dans le JAR/exécutable autonome d'Intuit Karate.
- Picocli fait partie de Ballerine. Ballerina utilise picocli pour tous ses utilitaires de ligne de commande.
- Picocli est utilisé dans le JAR/exécutable autonome CheckStyle de Checkstyle 8.15.
- Picocli est inclus dans la liste OpenJDK Quality Outreach des projets de logiciels libres open source (FOSS) qui testent activement les versions OpenJDK.
- Picocli est utilisé dans les outils de ligne de commande Apache Hadoop Ozone/HDDS, la CLI de référence Apache Hive, Apache Ignite TensorFlow et Apache Sling Feature Model Converter.
- Picocli est répertorié sur StackShare. Veuillez l'ajouter à votre pile et ajouter/voter pour les raisons pour lesquelles vous aimez picocli !
- Picocli est utilisé dans Pinterest ktlint.
- Picocli est utilisé dans Spring IO nohttp-cli.
- La bibliothèque MinecraftPicocli facilite l'utilisation de picocli dans Minecraft Forge.
- Simple Java Mail propose désormais une CLI basée sur picocli.
- jbang utilise non seulement picocli en interne, mais dispose également d'un modèle CLI pour générer un script initial : utilisez
jbang --init=cli helloworld.java
pour générer un exemple de script jbang compatible picocli. Voir asciinema. - Picocli est la bibliothèque principale utilisée dans le modèle cli-java CookieTemple pour créer des exécutables CLI natifs GraalVM en Java. Voir cet aperçu.
- Picocli est mentionné dans les directives de l'interface de ligne de commande.
Je suis heureux de voir que davantage de personnes utilisent picocli. Nous devons faire quelque chose de bien. :-)
Contribuez en aidant à promouvoir picocli
Si vous aimez picocli, aidez les autres à découvrir picocli :
Facile et percutant ?
- Donnez une étoile à picocli sur GitHub !
- Votez pour ma réponse StackOverflow à « Comment analyser les arguments de ligne de commande en Java ? »
- Votez pour ma réponse Quora à « Quelle est la meilleure façon d'analyser les arguments de ligne de commande avec Java ? »
Répandez la joie ! ?
- Tweetez à propos de Picocli ! Qu’est-ce que vous aimez là-dedans ? Comment cela vous a-t-il aidé ? En quoi est-ce différent des alternatives ?
- Mentionnez que votre projet utilise picocli dans la documentation de votre projet.
- Montrez que votre projet GitHub utilise picocli, avec ce badge dans votre README.md :
[![picocli](https://img.shields.io/badge/picocli-4.7.6-green.svg)](https://github.com/remkop/picocli)
Prêchez-le ! ?
- Le moyen le plus efficace de montrer aux gens comment picocli peut leur faciliter la vie est peut-être d'écrire un article de blog ou même de faire une vidéo !
Exemple
Annotez les champs avec les noms et la description des paramètres de ligne de commande. Implémentez éventuellement Runnable
ou Callable
pour déléguer la gestion des erreurs et les demandes d'aide à l'utilisation ou d'aide à la version à picocli. Par exemple:
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 );
}
}
Implémentez Runnable
ou Callable
, et votre commande peut être exécutée en une seule ligne de code. L'exemple ci-dessus utilise la méthode CommandLine.execute
pour analyser la ligne de commande, gérer les erreurs, gérer les demandes d'utilisation et d'aide sur la version et appeler la logique métier. Les applications peuvent appeler System.exit
avec le code de sortie renvoyé pour signaler le succès ou l'échec à leur appelant.
$ java Example -v inputFile1 inputFile2
2 files to process...
La méthode CommandLine.execute
imprime automatiquement le message d'aide à l'utilisation si l'utilisateur a demandé de l'aide ou lorsque l'entrée n'était pas valide.
Cela peut être personnalisé de plusieurs manières. Consultez la section du manuel d'utilisation sur l'exécution des commandes pour plus de détails.
Aide à l'utilisation avec les couleurs et les styles ANSI
Les couleurs, les styles, les en-têtes, les pieds de page et les titres de section sont facilement personnalisés avec des annotations. Par exemple:
Voir le code source.
API d'aide à l'utilisation
Les annotations Picocli offrent de nombreuses façons de personnaliser le message d'aide à l'utilisation.
Si les annotations ne suffisent pas, vous pouvez utiliser l'API d'aide de picocli pour personnaliser encore plus. Par exemple, votre application peut générer une aide comme celle-ci avec une mise en page personnalisée :
Voir le code source.
Télécharger
Vous pouvez ajouter picocli en tant que dépendance externe à votre projet ou l'inclure en tant que source. Voir le code source. Copiez-le et collez-le dans un fichier appelé CommandLine.java
, ajoutez-le à votre projet et profitez-en !
Graduation
implementation 'info.picocli:picocli:4.7.6'
Maven
<dependency>
<groupId>info.picocli</groupId>
<artifactId>picocli</artifactId>
<version>4.7.6</version>
</dependency>
Scala SBT
libraryDependencies += "info.picocli" % "picocli" % "4.7.6"
Lierre
<dependency org="info.picocli" name="picocli" rev="4.7.6" />
Raisin
@Grapes (
@ Grab ( group = ' info.picocli ' , module = ' picocli ' , version = ' 4.7.6 ' )
)
Leiningen
[info.picocli/picocli "4.7.6"]
Constructeur
'info.picocli:picocli:jar:4.7.6'
JBang
//DEPS info.picocli:picocli:4.7.6