Java命令行界面(第5部分):JewelCli
細算在Java命令行處理與Apache的百科全書CLI , args4j , jbock和命令行中先前的文章,我把注意力轉向在這個崗位使用JewelCli完成的命令行參數相似的處理Java中。
幾個Java命令行處理庫使用批注來定義命令行選項。 到目前為止,本系列文章涵蓋的四個庫中的三個都使用注釋,JewelCli也是如此。 JewelCli在到目前為止我所介紹的庫中是獨一無二的,因為它的注釋應用在Java接口上,而不是在Java類或類的構造上。 下一個代碼清單演示了如何在Java接口上使用批注來實現JewelCli命令行解析的“定義”階段。
JewelCli“定義”通過帶注釋的接口實現
package examples.dustin.commandline.jewelcli;import com.lexicalscope.jewel.cli.Option;/*** Interface defining JewelCli-friendly command-line parameters.*/ public interface MainCommandLine {@Option(shortName="f", description="Name and path of file to be used.")String getFile();@Option(shortName="v", description="Indicate whether status should be reported verbosely.")boolean isVerbose();@Option(helpRequest=true, description="Usage details on command-line arguments.")boolean getHelp(); }上面顯示的簡單界面包含許多與命令行處理相關的內容。 這些選項具有使用shortName注釋類型元素顯式指定的單連字符簡稱,并通過“ get”方法的名稱隱式指定(盡管longName注釋類型元素可用于顯式指定的長名稱[double hyphens]版本)開關)。 命令行選項還具有通過Option注釋提供的各自描述。 helpRequest=true的使用描述了應使用哪種命令行開關來顯示用法/幫助信息。 在這種情況下,因為注釋方法名為getHelp() ,所以--help開關將顯示用法信息。 如果我將方法命名為getDustin()并使用@Option(helpRequest=true)對其進行注釋,則該開關將為--dustin以顯示用法。
除了與方法名稱匹配的開關的長名稱外,JewelCli在配置情況下利用約定優于配置。 如上所示,在注釋了命令行選項的相應接口方法定義后,詳細程度開關(返回boolean )是可選的。 需要文件名切換,因為其對應的getFile()方法返回String 。 如果我想使文件名可選,則可以在getFile()方法的@Option注釋中提供defaultValue ,例如@Option(defaultValue="") 。
通過使用JewelCli @Option注釋進行注釋的接口(在本例中為MainCommandLine ),我們可以使用JewelCli @Option “解析”階段。 在Main的下一個代碼清單中,這與“訊問”階段一起得到了證明。
JewelCli的“解析”和“審訊”階段
package examples.dustin.commandline.jewelcli;import static java.lang.System.out;import com.lexicalscope.jewel.cli.CliFactory;/*** Demonstrates use of JewelCli for parsing command-line* parameters in Java.*/ public class Main {public static void main(final String[] arguments){final MainCommandLine main = CliFactory.parseArguments(MainCommandLine.class, arguments);out.println("You specified file '" + main.getFile() + "' with verbosity setting of '" + main.isVerbose() + "'.");} }剛剛顯示的Main類的其中一行“解析” [對CliFactory.parseArguments(Class<T>, String...)的調用],而另一行“詢問” [訪問JewelWli-上定義的方法的行帶注釋的接口,如先前所示]。
以下三個屏幕快照展示了實際中基于JewelCli的代碼示例。 第一個圖像演示了使用--help查看用法(注意輸出中包含堆棧跟蹤)。 第二張圖片顯示了長( - )和短( -- )選項開關的不同組合。 第三個圖像顯示了當未提供必需的命令行參數(在這種情況下為--file或-f )時顯示的輸出消息和關聯的堆棧跟蹤。
GitHub上提供了本文中用于演示JewelCli應用的這兩個類的代碼清單。
在選擇庫來幫助Java進行命令行解析時,需要考慮JewelJli的一些其他特性。
- JewelCli是開源的,并根據Apache軟件許可版本2獲得許可 。
- 當前的JewelCli ( 0.8.9 )JAR( jewelcli-0.8.9.jar / 2014年2月)大小約為542 KB。
- 無需其他庫即可使用JewelCli。
- 如上面的示例所示,JewelCli在Java接口上使用“定義”階段的注釋。 任何以類似方式注釋類“ get”方法的嘗試都會在運行時產生諸如“ IllegalArgumentException:…不是接口”之類的消息。
- 但是,JewelCli確實支持替代的基于類/實例的方法 ,該方法是對類上的“設置”方法進行注釋,而不是對接口上的“獲取”方法進行注釋。
- JewelCli允許接口從超級接口繼承,并且在繼承接口中將支持父接口中定義的@Option 。
- 界面中注釋的方法的返回數據類型提供了命令行選項值的類型強制。 枚舉甚至可以用作返回數據類型,以將可能的命令行選項類型縮小到一組有限的可能性。
JewelCli易于使用,并且由于其在配置方法方面的約定,因此只需很少的代碼即可定義,解析和詢問命令行參數。 我發現為定義可解析的命令行選項的接口添加注釋的推薦方法在美學上也很令人滿意。
其他資源
- JewelCli
- GitHub上的JewelCli
- Maven上的JewelCli
- JewelCli使用介紹
- JewelCli文檔/博客
- JewelCLI:Java的簡單CLI界面
- JewelCli:替代方案,評論,博客文章和用戶
翻譯自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-5-jewelcli.html
總結
以上是生活随笔為你收集整理的Java命令行界面(第5部分):JewelCli的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何做到登上谷歌搜索首页电脑如何访问谷歌
- 下一篇: 教你台式电脑怎么重装系统台式电脑如何安装