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 Framework para la creation de aplicaciones de línea de comandos (2023-09-09) by Darkcrizt
- picocli,un poderoso Framework para la creation de aplicaciones de línea de comandos (2023-09-09) by 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ような使い心地!
- Javaのコマンドラインプルケーション向けのfuresームワーク、picocliけめ (2020-03-07) 的部落格。
- KuromojiのCLIコマンドとpicocliとGraalVM (2020-02-28) 部落格文章,作者:@johtani。
- GraalVM、PicocliとJavaでときめくネイブコマンでときめくネイブコマンドラインプuriを作ろう (2019-11-23) 我在日本 Java 幻燈片組 JJろう (2019-11-23) 我在日本 Java 幻燈片中示範ろう (2019-11-23) 我在日本 Java 123) JJJUG 9UG 923) 我在日本 JavaCCC 2019997 月的幻燈片中示範。
- Picocliを使用してJavakoマンドラインプログラムを作成する - 開発者ドキュメンto (2019-10-18)
- GraalVM と Picocliで Javaのネイティブコマンドラのネイティブコマンドラインプリを作ろう (2019-09-06) 我在【東京を作ろう (2019-09-06) 我在【東京を作ろえナーール片手にLT大會9/6(金)
- Picocli+Spring Boot でコマンドラインプurikeションマンドラインプurikeションを作成してみる (2019-07-20) by してみる (2019-07-20) by かてこる (2019-07-20) 日記。
- 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
ConsoleLauncher
一部分。這可以幫助需要在命令列上指定許多測試並遇到系統限制的使用者。 - 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