Java命令行界面(第6部分):JOpt简单
JOpt Simple的主頁將這個(gè)基于Java的庫稱為“用于解析命令行選項(xiàng)的Java庫,例如您可能傳遞給調(diào)用javac的Java庫,”該Java庫試圖“使用POSIX getopt()的命令行選項(xiàng)語法)和GNU getopt_long() ?!?這是我使用Java進(jìn)行命令行參數(shù)處理系列文章的第六篇,其重點(diǎn)是JOpt Simple 。
在本系列的Java命令行處理中,我回顧過的大多數(shù)庫都以某種方式使用了注釋。 像Apache Commons CLI一樣 ,JOpt Simple不使用注釋。 JOpt Simple改為支持“流暢的界面”。 原始帖子的示例(代碼清單)和輸出(屏幕快照)基于JOpt Simple 4.9進(jìn)行編譯和運(yùn)行,但是當(dāng)我使用JOpt Simple 5.0.3進(jìn)行編譯和運(yùn)行時(shí),它們對(duì)我的工作方式相似(且無需更改代碼)。 。
下一個(gè)代碼清單演示了使用JOpt Simple進(jìn)行命令行處理的“定義”階段,該示例有意類似于先前有關(guān)Java命令行處理的文章中所使用的示例。
在JOpt Simple中定義命令行選項(xiàng)
final OptionParser optionParser = new OptionParser(); final String[] fileOptions = {"f", "file"}; optionParser.acceptsAll(Arrays.asList(fileOptions), "Path and name of file.").withRequiredArg().required(); final String[] verboseOptions = {"v", "verbose"}; optionParser.acceptsAll(Arrays.asList(verboseOptions), "Verbose logging."); final String[] helpOptions = {"h", "help"}; optionParser.acceptsAll(Arrays.asList(helpOptions), "Display help/usage information").forHelp();此代碼清單演示了如何使用“流利的API”方法定義命令行選項(xiàng)。 實(shí)例化一個(gè)OptionParser ,然后為每個(gè)潛在的命令行選項(xiàng)調(diào)用其重載的acceptsAll方法之一。 使用acceptsAll可以將多個(gè)標(biāo)志/選項(xiàng)名稱與單個(gè)選項(xiàng)相關(guān)聯(lián)。 對(duì)選項(xiàng)同義詞的這種支持允許對(duì)同一選項(xiàng)使用“ -f”和“ -file”。
上面的代碼演示了可以通過.required()方法調(diào)用根據(jù)需要指定命令行選項(xiàng)。 在這種情況下,需要一個(gè)“文件”。 如果期望將參數(shù)與選項(xiàng)/標(biāo)志關(guān)聯(lián)放置在命令行上,則可以使用withRequiredArg()方法。 上面的代碼清單中的“ help”選項(xiàng)利用forHelp()方法告訴JOpt Simple,如果與forHelp()關(guān)聯(lián)的選項(xiàng)位于命令行中,則如果命令行中未包含必需的選項(xiàng),則不要拋出異常。命令行。 在我的示例中,這可以確保操作員可以使用-h或--help來運(yùn)行應(yīng)用程序,而無需任何其他必需的選項(xiàng),并且可以避免引發(fā)異常。
“ JOpt簡單用法示例”頁面提供了有關(guān)定義命令行選項(xiàng)時(shí)可用的許多不同可能性的重要詳細(xì)信息,并使用基于JUnit的斷言來演示這些用于定義命令行選項(xiàng)的不同策略如何不同地配置所解析的內(nèi)容。 上面顯示的我的代碼清單僅顯示了可用內(nèi)容的一小部分。 請(qǐng)注意, OptionParser類的Javadoc注釋也包含重要的細(xì)節(jié)。
如果一個(gè)人靜態(tài)地導(dǎo)入 Arrays.asList并將潛在的命令行選項(xiàng)的名稱作為字符串直接傳遞給該asList(String ...)方法,而不是使用我創(chuàng)建字符串?dāng)?shù)組的方法,則上面的代碼會(huì)更加簡潔。首先,然后將它們轉(zhuǎn)換為列表。 我在介紹性文章中使用了這種方法,以很清楚地說明正在發(fā)生的事情,但是與該文章在GitHub上相關(guān)的代碼版本可能會(huì)更改為使用靜態(tài)導(dǎo)入方法。
使用JOpt Simple進(jìn)行命令行處理的“解析”階段非常簡單:
final OptionSet options = optionParser.parse(arguments);使用JOpt Simple進(jìn)行“解析”需要調(diào)用OptionParser.parse(String…)方法
使用JOpt Simple進(jìn)行命令行處理的“詢問”階段也很簡單,將在下一個(gè)代碼清單中進(jìn)行演示。
out.println("Will write to file " + options.valueOf("file") + " and verbosity is set to " + options.has("verbose"));單行代碼演示了詢問是由解析調(diào)用返回的OptionSet實(shí)例上調(diào)用便捷方法組成的。 在這種情況下,在OptionSet上調(diào)用的兩個(gè)演示方法是OptionSet.valueOf(String)和OptionSet.has(String) 。
JOpt Simple還支持自動(dòng)生成用法/幫助語句。 下一個(gè)代碼清單演示了如何執(zhí)行此操作。
optionParser.printHelpOn(out);剛剛顯示的單行代碼將OptionParser實(shí)例生成的用法/幫助信息寫入通過其printHelpOn(OutputStream)方法提供給它的輸出流。
上面顯示了應(yīng)用JOpt Simple所需的最重要的代碼,是時(shí)候看看使用此代碼的簡單應(yīng)用程序的行為了。 以下屏幕快照演示了實(shí)際的代碼。 第一個(gè)屏幕快照演示了未提供所需的“文件”命令行選項(xiàng)時(shí)打印的MissingRequiredOptionsException 。
下一個(gè)屏幕快照演示了如何在命令行中指定“文件”和“詳細(xì)”選項(xiàng)。
在下一個(gè)屏幕快照中將演示JOpt Simple提供的自動(dòng)使用/幫助消息。
在選擇框架或庫來幫助使用Java進(jìn)行命令行解析時(shí),需要考慮以下Apache Commons CLI的其他特征。
- JOpt Simple是開源的,并根據(jù)MIT許可獲得許可 。
- 在撰寫本文時(shí),JOpt Simple的最新版本是5.0.3和6.0 Alpha 1;而最新版本是5.0.1和6.0。 本文中使用了JOpt Simple 4.9( JOpt Simple更改日志中當(dāng)前列出的最新版本和Maven依賴示例中當(dāng)前顯示的版本)。
- jopt-simple-4.9.jar大小約為65 KB,并且對(duì)任何第三方庫都沒有編譯時(shí)依賴性。
- JOPT簡單的已經(jīng)或正在使用的幾個(gè)有影響庫和框架。 這些包括Spring框架 (可選的編譯依賴性)和JMH (編譯依賴性)。
- JOpt Simple Web頁面的主頁引用了Mark Reinhold的話 :“我想您可能會(huì)對(duì)我們?cè)陂_源Java開發(fā)工具包中使用jopt-simple庫感興趣。
- JOpt Simple已面世幾年,但似乎仍在維護(hù)(最新的Maven Central是2016年12月)。
- JOpt Simple不使用注釋,而是依靠流暢的API調(diào)用。
- JOpt Simple支持命令行選項(xiàng)之間的關(guān)系,例如必需的從屬選項(xiàng) 。
當(dāng)其他受歡迎且有用的工具和庫使用該庫時(shí),通常這是該庫有用的積極信號(hào)。 JOpt Simple被選為某些此類工具和庫的命令行處理庫的選擇,無疑與JOpt Simple很好。 對(duì)于喜歡使用不使用注釋的Java命令行處理的用戶,JOpt Simple提供了Apache Commons CLI的有用而強(qiáng)大的替代方法。 JOpt Simple提供的功能遠(yuǎn)遠(yuǎn)超過本文中顯示的功能,而該功能最好通過閱讀基于單元測(cè)試的“ 瀏覽JOpt Simple的功能 ” 來發(fā)現(xiàn) 。
其他參考
- JOpt簡單
- 基于Javadoc的JOpt簡單API文檔
- Maven上的JOpt Simple
- JOpt簡單示例
- JOpt簡單與JewelCli
- JOpt簡單與JCommander
- JOpt Simple的命令行參數(shù)
翻譯自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-6-jopt-simple.html
總結(jié)
以上是生活随笔為你收集整理的Java命令行界面(第6部分):JOpt简单的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hadoop综述_Hadoop书籍赠品–
- 下一篇: 唐世友友膏药是骗局吗