日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java命令行界面(第3部分):jbock

發(fā)布時(shí)間:2023/12/3 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java命令行界面(第3部分):jbock 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在本系列中有關(guān)使用Java進(jìn)行命令行分析的前兩篇文章中,我介紹了Apache Commons CLI和args4j庫。 在本系列的第三篇文章中,我將介紹jbock ,它是自我描述的“非常簡單的CLI解析器”。

我在Java中進(jìn)行命令行解析的文章使用了一些示例,這些示例基于向Java應(yīng)用程序提供必需的文件名和可選的詳細(xì)標(biāo)志。 本文中使用了相同的方法來演示jbock 1.8 。 GitHub上提供了示例類的完整源代碼,但是jbock( Main_Parser )生成的代碼不可用,因?yàn)樗梢陨伞?

jbock用于命令行處理的方法與先前介紹的兩個(gè)解析庫所使用的方法不同。 前面介紹的庫需要Java代碼來解析命令行參數(shù),以針對該庫的JAR構(gòu)建和執(zhí)行這些參數(shù)。 換句話說,庫的JAR必須同時(shí)在編譯時(shí)( javac )類路徑和運(yùn)行時(shí)Java啟動(dòng)器( java )類路徑中。 相反,jbock方法僅在編譯時(shí)依賴于jbock JAR的包含。 jbock方法生成的Java源代碼完全獨(dú)立于jbock庫。 例如,可以選擇運(yùn)行jbock一次生成這些Java源代碼文件,然后對這些生成的文件進(jìn)行版本控制,并且從那時(shí)開始僅對生成的文件進(jìn)行構(gòu)建和運(yùn)行,而無需對jbock的JAR進(jìn)行構(gòu)建或運(yùn)行。 僅當(dāng)需要重新生成生成的Java源代碼時(shí),才需要jbock JAR。 由于生成的代碼是基于自定義Java類上的注釋生成的,因此jbock代碼生成在大多數(shù)情況下可能會(huì)作為常規(guī)構(gòu)建的一部分而不是版本控制生成的源代碼來執(zhí)行。

在大多數(shù)情況下,當(dāng)使用jbock解析命令行參數(shù)時(shí),我將使用一個(gè)自定義類,其名稱為“ Arguments ”或“ CommandLine ”。 但是,對于本篇文章,我使用的是一個(gè)簡單的Main類,其示例與本系列其他文章中的其他命令行解析庫所使用的方法更相似。 像args4j一樣,jbock在命令行處理的“定義”階段使用注釋。 但是,jbock的注釋位于類的構(gòu)造函數(shù)及其參數(shù)上,而不是args4j的注釋類字段的方法。 下一個(gè)代碼清單中演示了基于jbock構(gòu)造函數(shù)的注釋方法。

命令行選項(xiàng)的jbock“定義”

@CommandLineArguments public Main(@ShortName('v') @LongName("verbose") @Description("Verbosity enabled?")final boolean newVerbose,@ShortName('f') @LongName("file") @Description("File name and path")final Optional<String> newFileName) {verbose = newVerbose;file = newFileName.orElse(""); } // . . .

下一個(gè)代碼清單中演示了使用jbock進(jìn)行命令行處理的“解析”階段。

用jbock“解析”命令行選項(xiàng)

final Main_Parser parser = new Main_Parser(); final Main_Parser.Binder binder = parser.parse(arguments); final Main main = binder.bind();

上面代碼清單中顯示的Main_Parser類是jbock根據(jù)第一個(gè)代碼清單中顯示的注釋生成的。 jbock庫處理Main類的注釋,以確定如何構(gòu)建Main_Parser類。 生成的類的名稱基于帶有jbock批注的類的名稱,并與_Parser串聯(lián)。 例如,如果將帶有jbock注釋的構(gòu)造函數(shù)的類和構(gòu)造函數(shù)參數(shù)命名為“ Arguments ”,則生成的類將命名為“ Arguments_Parser ”。

在命令行參數(shù)上調(diào)用了生成的Main_Parser類的實(shí)例的parse調(diào)用該實(shí)例的bind()方法以返回原始帶注釋的Main類的實(shí)例。 此時(shí)的“詢問”過程僅包括通過其公共“獲取”方法訪問該Main實(shí)例的屬性。 下一個(gè)代碼清單對此進(jìn)行了演示。

使用jbock進(jìn)行命令行處理的“詢問”階段

out.println("The file '" + main.getFile() + "' was provided and verbosity is set to '"+ main.isVerbose() + "'.");

下面的屏幕快照演示了使用jbock解析命令行選項(xiàng)的代碼。

如果需要幫助或用法信息,也可以從生成的*_Parser (在這種情況下為Main_Parser )類中檢索該信息。 具體來說,生成的*_Parser類包括表示各個(gè)選項(xiàng)的嵌套Option枚舉。 可以遍歷那些選項(xiàng)的枚舉值以檢索有關(guān)每個(gè)選項(xiàng)的元數(shù)據(jù)。 在下面的代碼清單中,對每個(gè)選項(xiàng)的枚舉值(所傳入的整數(shù)是要縮進(jìn)的空格數(shù)describe(int)調(diào)用describe(int)方法。

使用jbock獲取用法詳細(xì)信息

final Main_Parser parser = new Main_Parser(); if (arguments.length < 1) {for (final Main_Parser.Option option : Main_Parser.Option.values()){out.println(option.describe(3));}System.exit(-1); }

接下來顯示的屏幕快照演示了該代碼的實(shí)際作用,以打印出選項(xiàng)及其說明。

這篇文章中討論的源代碼可以在GitHub上找到 。

這是在選擇框架或庫來幫助Java進(jìn)行命令行解析時(shí)要考慮的jbock的其他一些特征。

  • jbock可作為開源軟件使用 。
  • 當(dāng)前版本的jbock(1.8)需要Java SE 8 。
  • jbock沒有第三方或外部依賴項(xiàng)。
  • jbock 1.8 JAR( jbock-1.8.jar )的大小約為131 KB,但這并不像類似庫那么重要,因?yàn)樵谶\(yùn)行時(shí)不需要此JAR(生成的代碼獨(dú)立于JAR)。
  • 我沒有演示jbock強(qiáng)制執(zhí)行必需的命令行參數(shù),因?yàn)樗室獠恢С衷摴δ堋?自述文件指出:“特意簡單:沒有轉(zhuǎn)換器,默認(rèn)值或要求檢查 。 使用Java 8,可以很容易地手動(dòng)添加這些東西。”

jbock與其他大多數(shù)基于Java的命令行解析庫不同的最明顯特征是,完全在編譯時(shí)生成了解析代碼,這對jbock庫沒有任何運(yùn)行時(shí)依賴性。 在擔(dān)心裝入的類數(shù)或表示的類路徑的大小的情況下,這將是一個(gè)明顯的優(yōu)勢。 自述文件列出了多個(gè)“將[jbock]分開”的項(xiàng)目。 其中包括“無反射,純靜態(tài)分析”和“通過構(gòu)造函數(shù)的便捷,靈活的屬性綁定”。

翻譯自: https://www.javacodegeeks.com/2017/06/java-command-line-interfaces-part-3-jbock.html

總結(jié)

以上是生活随笔為你收集整理的Java命令行界面(第3部分):jbock的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。