Java命令行界面(第10部分):picocli
picocli主頁面將picocli描述為“強大的微小命令行界面”,“ picocli”是一個文件Java框架,用于解析命令行參數并生成精美,易于定制的用法幫助消息。 有顏色。” 這篇文章簡要介紹了如何使用Picocli 0.9.7處理Java代碼中的命令行參數。
像本系列中介紹的其他基于Java的命令行處理庫一樣, picolci是開源的 。 由于picocli的所有實現都存在于單個Java源代碼文件中 ,因此如果需要,可以直接直接使用源代碼。 picocli頁面強調了這一點,“ picocli的一個顯著特征是它旨在讓用戶運行基于picocli的應用程序而無需將picocli作為外部依賴項:所有源代碼都保存在單個文件中,以鼓勵應用程序作者將其包含在其中。源表格 。” 如果您希望將picocli用作庫,則Maven信息庫中提供了一個JAR,其中包含大量已編譯的.class文件(Picocli具有一個Java文件,但具有許多嵌套的類和注釋)。
了解Picocli單文件性質的最簡單方法是查看該單文件本身。 在Picocli的“下載”頁面上可以找到CommandLine.java的Java源代碼。 接下來的兩個屏幕快照顯示了當對CommandLine類執行時,對一個內部注釋和一個內部類執行時, javap的一些輸出。
無論是將CommandLine.java編譯到自己的類/ JAR文件中還是選擇使用Maven中的預構建JAR,使用Picocli的應用程序的源代碼顯然都是相同的。 通過注釋實例字段來完成Picocli的“定義”階段,該實例字段將存儲與命令行選項關聯的值。 下面的代碼段對此進行了演示。
Picocli的“定義”階段
/*** Demonstrate Java-based command-line processing with picocli.*/ @Command(name="Main",description="Demonstrating picocli",headerHeading="Demonstration Usage:%n%n") public class Main {@Option(names={"-v", "--verbose"}, description="Verbose output?")private boolean verbose;@Option(names={"-f", "--file"}, description="Path and name of file", required=true)private String fileName;@Option(names={"-h", "--help"}, description="Display help/usage.", help=true)boolean help;剛剛顯示的代碼示例演示了Picocli允許指定選項標志的多個名稱(在我的示例中,我指定了單連字符單字符名稱和雙連字符多字符名稱)。 該例子也說明required=true能為所需的選項,指定help=true支持特別可以“幫助”選項來指定具體的幫助,行為,比如打印使用細節,避免與缺乏所需的選項錯誤。 請注意,Picocli 0.9.8通過versionHelp和usageHelp添加了更多特定的幫助類型支持。
“解析”階段是在Picocli中使用CommandLine.populateCommand(T,String ...)完成的 ,其中T是帶有Picocli批注字段的類的實例,其余String是要解析的參數。 下一個代碼片段對此進行了演示。
Picocli的“解析”階段
final Main main = CommandLine.populateCommand(new Main(), arguments);使用Picocli進行“詢問”階段僅需訪問在“分析”階段中傳遞給CommandLine.populateCommand(T,String...)方法的實例的Picocli注釋字段。 下一個代碼清單中描述了這種“詢問”的簡單示例。
皮科克里的“審訊”階段
out.println("The provided file path and name is " + main.fileName+ " and verbosity is set to " + main.verbose);要在命令行上提供-h或--help時向用戶顯示幫助/使用信息,就像“詢問”指定為help=true的Picocli注釋字段一樣簡單,以查看是否設置了該布爾值并且,如果已設置,則調用重載的CommandLine.usage方法之一。 我碰巧使用了此方法的static版本之一,如下面的代碼清單所示。
Picocli的幫助/使用
if (main.help) {CommandLine.usage(main, out, CommandLine.Help.Ansi.AUTO); }接下來的幾個屏幕快照演示了實際的基于Picocli的簡單處理應用程序。 第一個圖像顯示了錯誤消息的類型和堆棧跟蹤,當不存在必需的標志時,將顯示堆棧跟蹤。 第二張圖片顯示了如何在注釋中指定我使用的長名和短名。 第三張圖片顯示了正在使用的幫助功能。
許多其他基于Java的命令行解析庫所不具備的Picocli可選功能之一是顏色語法支持 。 這篇文章中的第一個代碼清單顯示了一些用@| |@注釋定義的字符串@| |@ @| |@語法。 在上面顯示“幫助”用法的屏幕快照中,這些字符按原樣傳遞,沒有特殊處理。 但是,如果我改為在Cygwin中運行此示例代碼,我將看到這些標記的作用。
從上面的屏幕快照中,我們看到Picocli自動將某些顏色語法(黃色和白色)應用于各個選項的幫助,并且還將定制的粗體和帶下劃線的粗體語法應用于描述@| |@區域@| |@ @| |@語法已應用。
在選擇框架或庫來幫助使用Java進行命令行解析時,需要考慮Picocli的一些其他特征。
- Picocli是開源的,并根據Apache License 2.0獲得許可 。
-  Picocli不需要下載任何第三方庫或框架。 - Picocli源代碼完全包含在一個.java文件中,并且該源代碼可以復制并粘貼到自己的配置管理系統中,并與其余應用程序代碼一起構建,這意味著甚至Picocli JAR文件也并非絕對必要。
 
- CommandLine.java源代碼文件(Picocli 0.9.7)不到3700行(包括空白和注釋),大小幾乎為200 KB。 picocli-0.9.7.jar文件的大小約為83 KB。
- Picocli得到當前和經常的支持。 它的0.9.8版本已于昨天發布(在我撰寫了這篇文章的大部分內容之后)。
- 與其他幾個基于Java的命令行處理庫的文檔相比, Picocli文檔更加詳細,并且在許多方面更具現代感。
- Picocli對顏色語法的支持易于使用,并且在不同平臺上對顏色語法的支持已在文檔的“ 支持的平臺 ”部分下進行了說明。
- Picocli在實例級字段上使用批注的方式與某些其他基于Java的命令行處理庫類似,并且具有相同的優勢。
- Picocli的基本功能非常易于訪問且易于快速學習,但是Picocli還支持使用Picocli顯著自定義命令行處理的多個方面的功能。
Picocli是當前支持和更新的庫,用于處理Java的命令行參數。 它具有其他一些可用的基于Java的命令行處理庫的一些較新的功能和方法,并引入了幾個不同的功能(顏色語法和整個庫封裝在單個Java源文件中)。 Picocli易于使用并具有吸引力,但是如果特定的開發人員希望獲得顏色語法支持或將源代碼文件拖放到開發人員項目中的能力,則該開發人員很可能會將其與其他開發人員分開需要一個JAR或已編譯的.class文件。
其他參考
- Picocli主頁
- Picocli發布
- Picocli的單個源文件: CommandLine.java
- Maven上的Picocli
- GitHub上的Picocli
- Picocli API文檔 (Javadoc)
翻譯自: https://www.javacodegeeks.com/2017/08/java-command-line-interfaces-part-10-picocli.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java命令行界面(第10部分):picocli的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 教你台式电脑怎么重装系统台式电脑如何安装
- 下一篇: SpringHibernate3
