cli命令行界面 demo_Java命令行界面(第24部分):MarkUtils-CLI
cli命令行界面 demo
本系列的第一篇 有關(guān)使用Java解析命令行參數(shù)的文章介紹了Apache Commons CLI庫(kù)。 這是本系列中介紹的基于Java的命令行解析庫(kù)中最古老的,而且可能是最常用的之一。 Apache Commons CLI確實(shí)顯示了它的時(shí)代,特別是與一些更現(xiàn)代的基于Java的命令行處理庫(kù)相比時(shí)。 Mark A. Ziesemer的“ Apache Commons CLI上的CLI庫(kù)包裝”,稱(chēng)為MarkUtils-CLI,旨在“現(xiàn)代化” Apache Commons CLI,并且是本博客文章的主題。
Ziesemer在博客文章“ MarkUtils-CLI:Apache Commons CLI的注釋(及更多) ”中寫(xiě)道:
我覺(jué)得Apache Commons CLI項(xiàng)目賣(mài)空了。 我發(fā)現(xiàn)它是一個(gè)非常全面,設(shè)計(jì)良好的庫(kù),可以有效地解析命令行。 我觀察到的唯一缺點(diǎn)是該項(xiàng)目是在Java 5和注釋可用之前開(kāi)發(fā)的。 因此,該庫(kù)不支持注釋必須提供的任何功能。
引入MarkUtils的最新功能:MarkUtils-CLI是一個(gè)庫(kù),可在Apache Commons CLI和Java注釋之間提供有效的橋梁,而無(wú)需替換成熟的Commons CLI庫(kù)。
這篇文章使用了與本系列以前的文章(“文件”和“詳細(xì)”命令行選項(xiàng))相似的示例,以說(shuō)明MarkUtils-CLI如何包裝Apache Commons CLI,并允許通過(guò)注釋定義選項(xiàng)并提供類(lèi)型化選項(xiàng)。 在本文中,使用MarkUtils-CLI的CliRunner是為了方便。 這些示例的完整源代碼清單可在GitHub上找到 。
MarkUtils-CLI的“定義”階段是應(yīng)用@Parameter注釋的地方,如下面的代碼清單所示。
MarkUtils-CLI的“定義”階段
@Parameter(name="f", longName="file", description="Path/name of file", required=true) public String file;@Parameter(name="v", longName="verbose", description="Verbosity enabled or not", argCount=0) public boolean verbose;此代碼清單顯示了如何將“短”選項(xiàng)名稱(chēng) (單個(gè)連字符/單個(gè)字符)和“長(zhǎng)”選項(xiàng)名稱(chēng) (雙連字符/單詞)指定為@Parameter批注的不同元素。 MarkUtils-CLI創(chuàng)建的“幫助”中可以使用“ description ”元素,并且“ required ”注釋元素允許您指定必需的選項(xiàng)。 為“詳細(xì)”指定argCount為零還向解析器指示“詳細(xì)”選項(xiàng)不需要任何參數(shù)。
可以通過(guò)CliRunner和Apache Commons CLI CommandLineParser的實(shí)例在MarkUtils-CLI中完成“解析”階段。 在下一個(gè)代碼清單中對(duì)此進(jìn)行了演示,其中將Apache Commons CLI的DefaultParser實(shí)例與該類(lèi)的實(shí)例(其字段使用@Parameter注釋進(jìn)行注釋)一起傳遞給CliRunner的構(gòu)造函數(shù)。
MarkUtils-CLI的“解析”階段
final DefaultParser cmdLineParser = new DefaultParser(); final CliRunner<Main> cliRunner = new CliRunner(cmdLineParser, Main.class);當(dāng)使用MarkUtils-CLI的CliRunner方法時(shí),“詢問(wèn)”階段是在Callable的call()方法中完成的,該方法傳遞給CliRunner的“ run”方法。 下一個(gè)代碼清單中顯示了“ call()”方法的實(shí)現(xiàn), 在GitHub的完整源代碼清單中提供了將擁有的Callable傳遞給CliRunner的“ run”方法的代碼 。
MarkUtils-CLI的“審訊”階段
@Override public Integer call() throws Exception {out.println("File path/name is '" + file + "' and verbosity is " + verbose);return file != null ? 0 : -1; }接下來(lái)的兩個(gè)屏幕快照演示了到目前為止顯示的示例。 第一張圖片顯示了當(dāng)沒(méi)有提供所需的“文件”選項(xiàng)時(shí)生成的幫助信息。 第二張圖片描繪了針對(duì)“文件”和“詳細(xì)”的短名稱(chēng)和長(zhǎng)名稱(chēng)選項(xiàng)的各種組合的示例代碼的行為。
選擇框架或庫(kù)來(lái)幫助Java進(jìn)行命令行解析時(shí),需要考慮MarkUtils-CLI的特征。
- MarkUtils-CLI是開(kāi)源的,并根據(jù)GNU通用公共許可證版本3 獲得 許可 。
- 一些 ,尤其是企業(yè)看來(lái),是不舒服與GPLv3的許可證。
- MarkUtils-CLI可作為單獨(dú)的JAR獲得,但從概念上講,它是可從https://java.ziesemer.com/獲得的更大MarkUtils的一部分。
- com.ziesemer.utils.cli-2017.05.28.jar JAR相對(duì)較小(大約26 KB),但對(duì)外部庫(kù)Apache Commons CLI具有運(yùn)行時(shí)依賴性(預(yù)期是因?yàn)镸arkUtils-CLI包裝了此庫(kù))和SLF4J (因?yàn)镾LF4J為廣泛使用的庫(kù),對(duì)于許多人來(lái)說(shuō),這種依賴性可能不是什么大問(wèn)題。
- MarkUtils-CLI需要Java SE 6 。
- MarkUtils-CLI的作者向我通知了該庫(kù)的存在,并且似乎正在積極地支持它,這對(duì)于本系列中的所有庫(kù)都無(wú)法說(shuō)明。 他已經(jīng)表示,他“致力于響應(yīng)和解決遇到的任何問(wèn)題 ” MarkUtils-CLI GitHub Issues Tracker 。 他還指出,有95個(gè)正在執(zhí)行的單元測(cè)試,它們驗(yàn)證了MarkUtils-CLI的功能。
MarkUtils-CLI是Apache Commons CLI的小型包裝,通過(guò)使用批注和命令行選項(xiàng)類(lèi)型的處理,使Apache Commons CLI體驗(yàn)現(xiàn)代化。 MarkUtils-CLI很可能會(huì)吸引那些已經(jīng)在使用Apache Commons CLI的用戶,并希望享受更輕松的帶有注釋的選項(xiàng)定義和更多類(lèi)型安全的選項(xiàng)解析的好處。 該庫(kù)的優(yōu)點(diǎn)包括庫(kù)的當(dāng)前支持和全面的單元測(cè)試。 可能阻止某些人使用該庫(kù)的問(wèn)題是其GPL許可證及其對(duì)SLF4J的外部依賴關(guān)系(假定Apache Commons CLI依賴關(guān)系不是問(wèn)題,因?yàn)樗恍麄鳛锳pache Commons CLI的包裝器)。
其他參考
- MarkUtils-CLI:Apache Commons CLI的注釋(及更多) (主博客文章)
- MarkUtils-CLI下載
- MarkUtils-CLI API文檔 (Javadoc)
- MarkUtils問(wèn)題
- https://java.ziesemer.com/ (包括MarkUtils-CLI在內(nèi)的各種Java項(xiàng)目)
- MarkUtils-CLI SureFire報(bào)告 (95個(gè)單元測(cè)試)
- MarkUtils博客文章
翻譯自: https://www.javacodegeeks.com/2017/10/java-command-line-interfaces-part-24-markutils-cli.html
cli命令行界面 demo
總結(jié)
以上是生活随笔為你收集整理的cli命令行界面 demo_Java命令行界面(第24部分):MarkUtils-CLI的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 索爱C905和K858(索爱c902)
- 下一篇: java登录界面命令_Java命令行界面