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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java命令行界面(第25部分):JCommando

發布時間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java命令行界面(第25部分):JCommando 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JCommando 網站 上將JCommando描述為“命令行參數的Java參數解析器”。 JCommando讀取XML配置以生成一個Java類,該類處理Java應用程序中的解析。 在提供XML配置的 Java命令行解析庫的本系列文章中,以前涵蓋的唯一基于Java的庫是JSAP ,但這是該庫的第二種配置形式, 我在JSAP的文章中并未介紹XML配置。

由于JCommando使用XML來指定要解析的命令行選項,因此JCommando的“定義”階段是通過XML規范完成的。 與本系列中的前幾篇文章一樣, 本篇文章中的示例基于文件路徑,名稱和詳細程度的命令行選項,它們在JCommando兼容XML中的定義顯示在下一個代碼清單( options.xml )中。

JCommando通過“定義”階段的XML部分: options.xml

<jcommando><option id="file" long="file" short="f" type="String"><description>Path and name of file</description></option><option id="verbose" long="verbose" short="v"><description>Verbosity enabled</description></option><commandless id="execute" allow-optionless="true"><or><option-ref id="file" /></or></commandless> </jcommando>

JCommando使用XML文件作為輸入,并基于該XML生成一個Java源代碼文件,該文件分析XML中指定的選項。 有兩種方法可以指示JCommando解析此XML并使用詳細信息生成Java源代碼。 一種方法是使用JCommando發行版隨附的可執行jcomgen可執行文件(在其bin目錄中)。 從XML生成Java類的第二種方法是此處顯示的方法:使用Apache Ant和JCommando提供的Ant任務。 下一個XML / Ant清單對此進行了演示。

使用JCommando從XML生成源的Ant目標

<target name="generateSourceForJCommando"description="Generate command line parsing source code that uses JCommando"><taskdef name="jcommando" classname="org.jcommando.ant.JCommando"><classpath><pathelement location="C:\lib\jcommando-1.2\lib\jcommando.jar"/></classpath></taskdef><jcommando inputfile="jcommando/options.xml"classname="MainParser"destdir="src"packagename="examples.dustin.commandline.jcommando"/></target>

上述Ant目標節目JCommando如何允許輸入XML文件( options.xml )被指定為“ inputfile ”,并且將所生成的Java源代碼文件將被放置在所述src目錄中的子目錄結構相匹配的指定包“ examples.dustin.commandline.jcommando ”。 下一個屏幕快照顯示了Ant目標和源代碼生成的執行。

這個Ant目標的結果是生成的Java源類MainParser.java其清單如下所示。

生成的Java源類MainParser.java

/** THIS IS A GENERATED FILE. DO NOT EDIT.** JCommando (http://jcommando.sourceforge.net)*/package examples.dustin.commandline.jcommando;import org.jcommando.Command; import org.jcommando.JCommandParser; import org.jcommando.Option; import org.jcommando.Grouping; import org.jcommando.And; import org.jcommando.Or; import org.jcommando.Xor; import org.jcommando.Not;/*** JCommando generated parser class.*/ public abstract class MainParser extends JCommandParser {/*** JCommando generated constructor.*/public MainParser(){Option file = new Option();file.setId("file");file.setShortMnemonic("f");file.setLongMnemonic("file");file.setDescription("Path and name of file");addOption(file);Option verbose = new Option();verbose.setId("verbose");verbose.setShortMnemonic("v");verbose.setLongMnemonic("verbose");verbose.setDescription("Verbosity enabled");addOption(verbose);Command execute = new Command();execute.setName("commandless");execute.setId("execute");execute.addOption(file);execute.setGrouping( createExecuteGrouping() );addCommand(execute);}/*** Called by parser to set the 'file' property.** @param file the value to set.*/public abstract void setFile(String file);/*** Called by parser to set the 'verbose' property.**/public abstract void setVerbose();/*** Called by parser to perform the 'execute' command.**/public abstract void doExecute();/*** Generate the grouping for the 'execute' command.*/private Grouping createExecuteGrouping(){Or or1 = new Or();or1.addOption(getOptionById("file"));return or1;} }

生成Java源代碼后,我們現在有了選項定義。 編寫自定義類以擴展生成的MainParser并訪問其父級進行解析。 在自定義編寫的Main類的下一個代碼清單中對此進行了演示,該類擴展了所生成的MainParser類。

自定義類擴展生成的類

package examples.dustin.commandline.jcommando;import static java.lang.System.out;/*** Demonstrates JCommando-based parsing of command-line* arguments from Java code.*/ public class Main extends MainParser {private String file;private boolean verbose;@Overridepublic void setFile(final String newFilePathAndName){file = newFilePathAndName;}@Overridepublic void setVerbose(){verbose = true;}public static void main(final String[] arguments){final Main instance = new Main();instance.parse(arguments);}/*** Called by parser to execute the 'command'.*/public void doExecute(){out.println("File path/name is " + file + " and verbosity is " + verbose);} }

如上面顯示的自定義Main.java源代碼所示,“解析”階段是通過執行parse(String[])方法在JCommando中完成的,該方法繼承自JCommando基于配置XML生成的類(以及生成的類)從其父級JCommandParser類獲取其對該parse方法的定義)。

擴展生成的類的自定義類需要具有用于實現選項的“設置”方法。 有了這些適當的實現,基于JCommando的應用程序中的“詢問”階段就很容易訪問那些自定義實現的“設置”方法所設置的字段。 最后代碼清單中顯示的doExecute()方法對此進行了演示。 由于在配置XML中指定了id為“ execute ”的<commandless>元素,因此doExecute方法在生成的父類中作為abstract方法生成。

自定義類最終擴展的JCommandParser類具有方法printUsage() ,可用于將“幫助” /“使用”輸出寫入標準輸出。 可以從GitHub上 Main.java的源代碼中看到。

接下來的兩個屏幕快照演示了如何執行本文中討論的示例代碼。 第一個屏幕快照顯示“可以自動打印的使用信息,在這種情況下,如果未指定所需的”文件”選項。 第二個屏幕快照演示了“ vile”和“ verbose”選項的長名稱和短名稱的組合。

本文總結了使用JCommando涉及的步驟。

  • 在XML文件中定義選項。
  • 使用兩種方法之一從XML生成Java解析器源代碼。
    • 使用jcomgen的bin目錄中提供的jcomgen工具。
    • 如本文所展示的,將Ant目標與JCommand提供的Ant任務一起使用。
  • 編寫擴展生成的解析器類的Java類。
  • 選擇用于幫助Java進行命令行解析的框架或庫時,需要考慮JCommando的特征。

    • JCommando是開源的,可在zlib / libpng許可(Zlib)下獲得 。
    • jcommando.jar JAR的大小約為27 KB,并且沒有第三方依賴性。
    • 通過XML在JCommando中定義選項是與本系列文章中介紹的其他庫不同的方法,但是我發現JCommando的選項定義更有趣的是能夠輕松表達選項之間的關系,例如“和”,“或”,“異或” ”,以及這些的嵌套組合。

    JCommando在基于Java的命令行選項解析方面實現了一些新穎的概念。 它要求對潛在的命令行選項進行XML配置,但使在這些選項之間建立關系變得容易。 JCommando從XML選項配置生成Java源,并且自定義解析類擴展了該生成的類。 JCommando也是本系列中第一個使用Zlib許可證的庫 。

    其他參考

    • 突擊隊
    • JCommando教程
    • JCommando XML標簽參考
    • JCommando API文檔 (Javadoc)
    • JCommando下載

    翻譯自: https://www.javacodegeeks.com/2017/10/java-command-line-interfaces-part-25-jcommando.html

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。