picocli - 一个强大的小型命令行界面
Picocli 旨在成为创建可在 JVM 上和之外运行的丰富命令行应用程序的最简单易用的方法。考虑皮科利?查看满意的用户对 picocli 的评价。
Picocli 是一个用 Java 编写的现代库和框架,包含注释 API 和编程 API。它具有 ANSI 颜色和样式、TAB 自动完成和嵌套子命令的使用帮助。在单个文件中,因此您可以将其包含在源代码形式中。这允许用户运行基于 picocli 的应用程序,而不需要 picocli 作为外部依赖项。
基于 Picocli 的应用程序可以提前编译为本机映像,具有极快的启动时间和较低的内存要求,并且可以作为单个可执行文件进行分发。 Picocli 附带一个注释处理器,可在编译期间自动启用 Graal 的 jar。
Picocli 应用程序可以非常紧凑,没有样板代码:您的命令(或子命令)可以用一行代码执行。只需实现Runnable
或Callable
,或者将命令的业务逻辑放入@Command
注解的方法中。
Picocli 让您可以轻松遵循命令行界面指南。
它是如何工作的:注释你的类,picocli 从命令行参数初始化它,将输入转换为强类型数据。支持类似 git 的子命令(以及嵌套的子子命令)、任何选项前缀样式、POSIX 样式分组短选项、自定义类型转换器、密码选项等。
Picocli 区分命名选项和位置参数,并允许两者都是强类型的。多值字段可以指定参数的确切数量或范围(例如, 0..*
、 1..2
)。支持 Map 选项,例如-Dkey1=val1 -Dkey2=val2
,其中键和值都可以强类型化。解析器跟踪有助于故障排除。命令行参数文件(@-files)允许应用程序处理很长的命令行。
生成精美且易于定制的使用帮助和版本帮助,并尽可能使用 ANSI 颜色。至少需要 Java 5,但旨在促进 Java 8 lambda 的使用。在 5 到 18-ea(含)之间的所有 Java 版本上进行了测试。
基于 Picocli 的命令行应用程序可以具有 TAB 自动完成功能,以交互方式向用户显示可用的选项和子命令。当选项具有completionCandidates
或具有enum
类型时,自动完成还可以建议选项值。 Picocli 可以为 bash 和 zsh 生成补全脚本,并提供picocli-shell-jline2
和picocli-shell-jline3
模块以及用于构建交互式 shell 应用程序的 JLine Completer
实现。
picocli 中的独特功能包括支持可否定选项、高级引用值和参数组。参数组可用于创建互斥选项、相互依赖选项、使用帮助消息中的选项部分以及重复复合参数,例如([-a=<a> -b=<b> -c=<c>] (-x | -y | -z))...
对于高级用例,应用程序可以使用@Spec
注释访问picocli命令对象模型,并在内置逻辑不足时对选项参数实现自定义参数处理。
基于 Picocli 的应用程序可以轻松与依赖注入容器集成。 Micronaut 微服务框架内置了对 picocli 的支持。 Quarkus 具有带有 Picocli 扩展的命令模式,可方便使用 Quarkus 创建基于 picocli 的 CLI 应用程序。 Picocli 附带picocli-spring-boot-starter
模块,其中包括PicocliSpringFactory
和 Spring Boot 自动配置,以便在 picocli 命令行应用程序中使用 Spring 依赖项注入。用户手册提供了与 Guice、Spring Boot、Micronaut、Quarkus 以及符合 CDI 2.0 规范 (JSR 365) 的容器集成的示例。
发布
- 所有版本
- 最新:4.7.6 发行说明
- 较旧版本:Picocli 4.0 发行说明
- 较旧版本:Picocli 3.0 发行说明
- 较旧版本:Picocli 2.0 发行说明
文档
- 4.x 用户手册:https://picocli.info
- 4.x 快速指南
- 4.x API Javadoc
- 预览:所有工件的模块化 Javadoc (4.7.6-SNAPSHOT)
- 命令行自动完成
- 编程式API
- 常问问题
- GraalVM AOT 编译为本机映像
年长的
3.x 用户手册3.x 快速指南3.x API Javadoc 2.x 用户手册2.x API Javadoc 1.x 用户手册
文章和演示文稿
英语
- JBang 可以做但 Shell 不能做的 6 件事 (2022-02-28) 作者:F.Marchioni。
- [视频]Kotlin、CLI 和 StarWars! - Julien Lengrand-Lambert 介绍如何使用 Picocli 通过 Kotlin 创建 CLI 应用程序 (2022-02-05)。
- [视频]使用 Picocli 自动完成 Java CLI (2022-01-24),作者:raksrahul。
- Picocli – Java 中 CLI 参数的简易性 (2021-10-27),作者:agamboa。
- 使用 picoCLI 使用 Kotlin 构建命令行界面 (2021-09-23),作者:Julien Lengrand-Lambert。
- [视频]使用 picocli 创建 Java CLI 应用程序 (2021-09-14),作者:coder4life。
- PICOCLI (2021-06-30),作者:Sybren Boland。
- 皮科利|使用 GraalVM 创建您的第一个 Kotlin /JVM CLI 应用程序 (2021-02-13),作者:manserpatrice。
- [视频] 使用 Quarkus、picocli、fabric8io 和 jbang 构建 kubectl 插件 (2021-01-22),作者:Sébastien Blanc。
- [视频] J-Fall Virtual 2020:Julien Lengrand - Julien Lengrand-Lambert 介绍如何使用 picoCLI 创建 CLI 应用程序 (2020-12-07)。这是@nljug #jfall virtual 2020 评价最高的演讲!恭喜,朱利安!
- 使用 picoCLI (2020-11-17) 对命令行应用程序中的结果进行分页,作者:Julien Lengrand-Lambert。
- 使用 GraalVM Native Image 的 CLI 应用程序 (2020-11-13),作者:Oleg Šelajev。
- Picocli 子命令 - 一个程序,多种用途 (2020-09-22),作者:Jonas Andersen。
- 带有 Picocli 和 GraalVM 的本机 CLI (2020-08-20),作者:jbebar。
- 如何使用 jbang 和 picocli 在 Java 中构建 CLI 应用程序 (2020-08-13),作者:Matthew Gilliard。
- 使用 Quarkus 和 Picocli 构建 GitHub Dependents Scraper (2020-07-31),作者:Marc Nuri。
- 构建一个像样的 Java CLI (2020-07-27),作者:Andreas Textor。
- [视频](Szymon Stepniak 制作的另一个制作精良的视频)使用 Micronaut、Picocli 和 GraalVM 在 Java 命令行应用程序中实现 OAuth 2.0 (2020-07-23),作者:Szymon Stepniak(YouTube 频道)。
- Micronaut、Picocli 和 GraalVM (2020-07-08),作者:Szymon Stepniak。
- [视频](制作非常精良,信息丰富,推荐!)使用 Java 11、Micronaut、Picocli 和 GraalVM 构建命令行应用程序 (2020-07-01),作者:Szymon Stepniak(YouTube 频道)。
- [音频]Scala Valentines #2 (2020-06-21) 播客谈论 picocli(从 18:11 开始)。
- 如何使用 Java 创建命令行工具? (2020-06-18) 作者:Vijay SRJ。
- 使用 Quarkus 和 Picocli 的命令行工具 (2020-06-08),作者:Dmytro Chaban。
- Quarkus 使用 picocli 命令模式的 Quarkus 指南,感谢 Quarkus 1.5 中包含的 Michał Górniewski 的 picocli 扩展 (2020-06-03)。
- 使用 Micronaut 和 GraalVM 的原生图像 (2020-06-01),作者:Λ:Olivier Revial。
- 使用 Micronaut 和 Picocli 的 CLI 应用程序 (2020-06-01),作者:Λ:Olivier Revial。
- Picocli 简介 - 现代 Java 命令行解析 (2020-05-19) 作者:Jonas Andersen。
- 使用 Java、PicoCLI 和 GraalVM 构建本机 Covid19 Tracker CLI (2020-05-11),作者:Mohammed Aboullaite。
- Quarkus 命令模式与 Picocli (2020-04-27),作者:Dmytro Chaban。
- 使用 Scala、Picocli 和 GraalVM 创建 CLI 工具 (2020-03-09) 作者:Naoki Takezoe
- 使用 GraalVM、Picocli 和 Gradle 构建本机 Java CLI (2020-03-08) 作者:Mitch Seymour
- 使用 Graalvm 和 Picocli 在 Java 中构建出色的本机 CLI 应用程序 (2020-03-07)
- Philipp Hanslovsky 的 Picocli 结构化对象 (2019-09-10) 解释了如何使用 picocli 对重复参数组的支持从命令行添加或配置结构化对象。
- 使用 Picocli|Baeldung 创建 Java 命令行程序 (2019-05-07) 作者:François Dupire。
- picocli JAX 杂志旋风巡演“聚焦 Java 工具”(2019-04-08)。
- devop 介绍 PicoCLI (2019-02-10)。
- Corda CLI UX(用户体验)指南(2018 年,R3 Limited)提供了有用的建议。
- 使用 groovy 脚本开发 CLI 工具 (2018-10-26),作者:Chinthaka Dinadasa。
- 从 Commons CLI 迁移到 picocli。你不会后悔的! :-)(还包括:DZone 和 Java Code Geeks)。
- Groovy 2.5 CliBuilder 更新(也在 blogs.apache.org 上)。分为两部分:第 1 部分(同时介绍:DZone、Java Code Geeks)、第 2 部分(同时介绍:DZone、Java Code Geeks)。
- Micronaut 用户手册,用于使用 picocli 独立运行微服务。
- Java 命令行界面(第 30 部分):Dustin Marx 对 picocli 2.0.1 的观察(另见:DZone、Java Code Geeks)
- Java 命令行界面(第 10 部分):Dustin Marx 撰写的 Picocli 0.9.7 的 Picocli(另见:DZone、Java Code Geeks)
- Picocli 2.0:类固醇上的 Groovy 脚本(还包括:DZone、Java Code Geeks)
- Picocli 2.0:事半功倍(另见:DZone、Java Code Geeks)
- 宣布 picocli 1.0(也在:DZone)
俄罗斯
- Выбор необходимых опций Picocli на основе основного варианта (2020-05-07)
- Интерфейсы командной строки Java: picocli (2018-08-06):MaxRokatansky 对达斯汀·马克思博客文章的俄语翻译。
西班牙语
- picocli,un poderoso 框架,用于创建命令线应用程序 (2023-09-09),作者:Darkcrizt
- picocli,un poderoso 框架,用于创建命令线应用程序 (2023-09-09),作者:Darkcrizt
- Quarkus + Picocli:在 GitHub 上实现依赖于外部项目的 Web scar (2020-08-15),作者:Marc Nuri。
- Quarkus - 简介:picocli (2020-06-15),作者:Gerardo Arroyo。
- [视频] Picocli - Spring Boot 示例 (2020-05-24) Gonzalo H. Mendoza 的 7 分钟快速介绍。
法国人
- 移动应用程序:Créez de superbes applications CLI natives en Java avec Graalvm et Picocli (2020-05-07) bouf1450 翻译的使用 Graalvm 和 Picocli 在 Java 中构建出色的本机 CLI 应用程序。
- [视频] Des applications en ligne de commande avec Picocli et GraalVM (N. Peters) (2019-05-07):Nicolas Peters 在 Devoxx FR 期间进行了 15 分钟的演示。演示幻灯片可在 GitHub 上获取。
葡萄牙语
- 在 Java 中开发 CLI 原生应用程序 Graalvm e Picocli (2020-08-28):使用 Graalvm 和 Picocli 在 Java 中构建出色的本机 CLI 应用程序的葡萄牙语翻译,感谢 Rodrigo Ap G Batista。
- [视频] Quarkus #40:命令模式 com Picocli (2020-06-23):Vinícius Ferraz (@viniciusfcf) 的 13 分钟演示。
日本语
- 使用 GraalVM Native Image 的 CLI 应用程序 (2020-11-21) 由 Logico_jp 对 Oleg Šelajev 的帖子进行翻译。
- Picocli + Kotlin + graalvm-native-image 插件 でネイティブツールを作る (2020-04-24) mike-neck 的博客文章(Twitter 上的引きこもり持田)。
- pythonのArgumentParserような使い心地!picocliのご绍介 (2020-04-15) by @astamuseLab
- Javaのコマンドラインプルケーション向けのfuresームワーク、picocliで游ぶ (2020-03-07) かずひら的博客文章。
- KuromojiのCLIコマンドとpicocliとGraalVM (2020-02-28) 博客文章,作者:@johtani。
- GraalVM、PicocliとJavaでときめくネイブコマンドラインプuriを作ろう (2019-11-23) 我在日本 Java 用户组 JJUG CCC 2019 秋季会议上演示的幻灯片。
- Picocliを使用してJavakoマンドラインプログラムを作成する - 开発者ドキュメンto (2019-10-18)
- GraalVM と Picocliで Javaのネイティブコマンドラインプリを作ろう (2019-09-06) 我在【东京】JJUG ナイトセミナー 上进行闪电演讲的幻灯片:ビール片手にLT 大会9/6(金)
- Picocli+Spring Boot でコマンドラインプリケーションを作成してみる (2019-07-20) by かんがるーさんの日记。
- GraalVMの原生镜像を使って Java で爆速 Lambda の梦を见る (2019-05-02) by @kencharos
中文
- Java命令行界面(第10部分):picocli (2020-06-07) dnc8371 翻译。
- 如何借助 Graalvm 和 Picocli 构建 Java 编写的原生 CLI 应用 (2020-03-26):《Build Great Native CLI Apps in Java with Graalvm and Picocli》的中文翻译,感谢张卫滨。
- 从Commons CLI迁移到Picocli (2019-03-13):Migration from Commons CLI to picocli的中文翻译,感谢耿海华。
- Picocli 2.0:类固醇上的 Groovy 脚本
- Picocli 2.0:以少求多
邮件列表
如果您有兴趣讨论与 picocli 相关的任何内容并接收有关新版本的公告,请加入 picocli Google 群组。
信用
Reallinfo设计了picocli标志!非常感谢!
承诺
采用
- Picocli 现在是 Groovy 的一部分。从 Groovy 2.5 开始,所有 Groovy 命令行工具都是基于 picocli 的,而 picocli 是 Groovy 的 CliBuilder DSL 的底层解析器。
- Picocli 现在是 Micronaut 的一部分。 Micronaut CLI 已使用 picocli 进行了重写,并且 Micronaut 专门支持使用 picocli 独立运行微服务。另请参阅 Micronaut Picocli 指南。
- Quarkus 现在提供带有 picocli 的命令模式。
- Picocli 现在是 JUnit 5 的一部分。JUnit 5.3 将其
ConsoleLauncher
从 jopt-simple 迁移到 picocli 以支持 @-files(参数文件);这可以帮助需要在命令行上指定许多测试并遇到系统限制的用户。 - Debian 现在提供了 libpicocli-java 软件包。感谢米罗斯拉夫·克拉维克。
- Picocli 用于 Intuit Karate 独立 JAR/可执行文件。
- 皮科利是芭蕾舞女演员的一部分。 Ballerina 将 picocli 用于其所有命令行实用程序。
- Picocli 用于 Checkstyle 8.15 的 CheckStyle 独立 JAR/可执行文件中。
- Picocli 包含在免费开源软件 (FOSS) 项目的 OpenJDK 质量推广列表中,这些项目积极针对 OpenJDK 构建进行测试。
- Picocli 用于 Apache Hadoop Ozone/HDDS 命令行工具、Apache Hive 基准 CLI、Apache Ignite TensorFlow 和 Apache Sling 功能模型转换器。
- Picocli 已在 StackShare 上列出。请将其添加到您的堆栈中并添加/点赞您喜欢 picocli 的原因!
- Picocli 用于 Pinterest ktlint。
- Picocli 在 Spring IO nohttp-cli 中使用。
- MinecraftPicocli 库促进了 picocli 在 Minecraft Forge 中的使用。
- Simple Java Mail 现在提供基于 picocli 的 CLI。
- jbang 不仅在内部使用 picocli,而且还有一个 CLI 模板来生成初始脚本:使用
jbang --init=cli helloworld.java
生成启用 picocli 的 jbang 脚本示例。参见asciinema。 - Picocli 是 CookieTemple cli-java 模板中使用的主要库,用于在 Java 中构建 GraalVM 本机 CLI 可执行文件。请参阅此预览。
- 命令行界面指南中提到了 Picocli。
很高兴看到越来越多的人使用 picocli。我们必须做正确的事。 :-)
通过帮助推广 picocli 做出贡献
如果您喜欢 picocli,请帮助其他人发现 picocli:
简单且有影响力?
- 在 GitHub 上给 picocli 一颗星!
- 投票支持我在 StackOverflow 上对“如何在 Java 中解析命令行参数?”的回答。
- 投票支持我的 Quora 回答“用 Java 解析命令行参数的最佳方式是什么?”
传播欢乐! ?
- 关于 picocli 的推文!你喜欢它什么?它对你有什么帮助?它与替代品有何不同?
- 在项目文档中提及您的项目使用 picocli。
- 表明您的 GitHub 项目使用 picocli,并在 README.md 中使用此徽章:
[![picocli](https://img.shields.io/badge/picocli-4.7.6-green.svg)](https://github.com/remkop/picocli)
宣讲吧! ?
- 也许向人们展示 picocli 如何让他们的生活更轻松的最有影响力的方式是写一篇博客文章或文章,甚至制作一个视频!
例子
使用命令行参数名称和描述来注释字段。可以选择实现Runnable
或Callable
,以将错误处理和使用帮助或版本帮助请求委托给 picocli。例如:
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 );
}
}
实现Runnable
或Callable
,您的命令可以在一行代码中执行。上面的示例使用CommandLine.execute
方法来解析命令行、处理错误、处理使用和版本帮助请求以及调用业务逻辑。应用程序可以使用返回的退出代码调用System.exit
来向调用者发出成功或失败的信号。
$ java Example -v inputFile1 inputFile2
2 files to process...
如果用户请求帮助或输入无效, CommandLine.execute
方法会自动打印使用帮助消息。
这可以通过多种方式进行定制。有关详细信息,请参阅用户手册中有关执行命令的部分。
ANSI 颜色和样式的使用帮助
颜色、样式、页眉、页脚和章节标题可以通过注释轻松自定义。例如:
查看源代码。
使用帮助API
Picocli 注释提供了多种自定义使用帮助消息的方法。
如果注释不够,您可以使用 picocli 的帮助 API 进一步自定义。例如,您的应用程序可以使用自定义布局生成如下帮助:
查看源代码。
下载
您可以将 picocli 添加为项目的外部依赖项,也可以将其包含为源。查看源代码。将其复制并粘贴到名为CommandLine.java
的文件中,将其添加到您的项目中,然后享受吧!
摇篮
implementation 'info.picocli:picocli:4.7.6'
梅文
<dependency>
<groupId>info.picocli</groupId>
<artifactId>picocli</artifactId>
<version>4.7.6</version>
</dependency>
斯卡拉SBT
libraryDependencies += "info.picocli" % "picocli" % "4.7.6"
常春藤
<dependency org="info.picocli" name="picocli" rev="4.7.6" />
葡萄
@Grapes (
@ Grab ( group = ' info.picocli ' , module = ' picocli ' , version = ' 4.7.6 ' )
)
莱宁根
[info.picocli/picocli "4.7.6"]
建造者
'info.picocli:picocli:jar:4.7.6'
杰邦
//DEPS info.picocli:picocli:4.7.6