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