java登录界面命令

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() ,可用于将“ help” /“ usage”输出写入标准输出。 可以从GitHub上 Main.java的源代码中看到。

接下来的两个屏幕快照演示了本文中讨论的示例代码的执行。 第一个屏幕快照显示“可以自动打印的使用信息,在这种情况下,如果未指定所需的”文件”选项。 第二个屏幕快照演示了“ vile”和“ verbose”选项的长名称和短名称的组合。

本文总结了使用JCommando涉及的步骤。

  1. 在XML文件中定义选项。
  2. 使用两种方法之一从XML生成Java解析器源代码。
    • 使用jcomgenbin目录中提供的jcomgen工具。
    • 如本文所展示的,将Ant目标与JCommand提供的Ant任务一起使用。
  3. 编写扩展生成的解析器类的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登录界面命令

java登录界面命令_Java命令行界面(第25部分):JCommando相关推荐

  1. java登录界面命令_Java命令行界面(第18部分):JCLAP

    java登录界面命令 Giles Winstanley的JCLAP ( Java命令行参数解析器 )是基于Java的命令行处理库的系列文章中介绍的第18个库. 这篇文章的示例基于JCLAP 1.4 , ...

  2. java登录界面命令_Java命令行界面(第10部分):picocli

    java登录界面命令 picocli主页面将picocli描述为"强大的微小命令行界面"," picocli"是一个单文件Java框架,用于解析命令行参数并生成 ...

  3. java登录界面命令_Java命令行界面(第30部分):观察

    java登录界面命令 这个有关Java命令行参数解析的系列文章由四个月来发表的29篇帖子组成,涵盖了28个不同的开放源代码库,可用于解析Java命令行参数. 这篇文章收集了可以从本系列的前29篇文章中 ...

  4. java登录界面命令_Java命令行界面(第7部分):JCommander

    java登录界面命令 这是我系列的第七篇文章,简要介绍了用于处理Java命令行参数的各种库. 这篇文章回到了基于注释的库的覆盖范围,该库似乎是在Java中可用于处理命令行参数的众多可用库中知名度最高, ...

  5. java登录界面命令_Java命令行界面(第26部分):CmdOption

    java登录界面命令 由于Tweet,我了解了本系列中第26个基于Java的功能强大的库,该库用于解析命令行参数 . CmdOption在其GitHub主页上被描述为"一个通过注释配置的,用 ...

  6. java登录界面命令_Java命令行界面(第12部分):CLAJR

    java登录界面命令 第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 (CLAJR). 该"库"是单个Java源文件( CLA ...

  7. java登录界面命令_Java命令行界面(第11部分):CmdLn

    java登录界面命令 这篇文章介绍了如何使用Ostermiller Java Utilities 1.08.02的CmdLn(Java命令行解析器)来处理基于Java的应用程序中的命令行参数. Ost ...

  8. java登录界面命令_Java命令行界面(第13部分):JArgs

    java登录界面命令 JArgs 1.0的区别在于,这是我的第13篇文章的主题,该文章是关于Java命令行参数解析的. JArgs是一个开放源代码( BSD许可 )库,主要由Steve Purcell ...

  9. java登录界面命令_Java命令行界面(第15部分):Jargo

    java登录界面命令 Jargo在其GitHub主页上定义为"一种减轻程序参数/选项处理的工具". 当已经存在许多其他命令行处理库时,该页面为另一个命令行处理库提供了基本原理 ,该 ...

最新文章

  1. java iterator如何知道数量_Java开发岗面试题基础篇(二)
  2. ios怎么玩java模拟器游戏_新方式玩iOS手游 水果模拟器让电脑运行苹果iOS
  3. mac版python安装pandas_Mac OS 安装pandas
  4. 《Python Cookbook 3rd》笔记(5.4):读写字节数据
  5. 【Pytorch神经网络实战案例】24 基于迁移学习识别多种鸟类(CUB-200数据集)
  6. 《Windows驱动开发技术详解》之HelloDDK
  7. mysql事务的acid、三种并发问题与四种隔离级别
  8. java程序设计_Java程序设计-类和对象(笔记)
  9. 库存收藏-各种设备默认用户名和密码
  10. JAVA数据结构和算法系列视频教程 20课
  11. ACM 6174问题C++解决
  12. 读书笔记-人际网络的中心
  13. OpenGL中各种坐标系的理解
  14. 阿里巴巴数据挖掘笔试题摘
  15. win10 更新后摄像头问题
  16. 手机epub阅读软件
  17. Mockito的简单使用
  18. idea如何启动vue项目
  19. bad transparency mask. 解决办法
  20. php无穷小,无穷小理论与Python语言

热门文章

  1. AT2371-[AGC013E]Placing Squares【矩阵乘法】
  2. P7515-[省选联考 2021A卷]矩阵游戏【差分约束】
  3. P4590-[TJOI2018]游园会【dp套dp】
  4. P1903-[国家集训队]数颜色/维护队列【带修莫队】
  5. P3914-染色计数【树形dp】
  6. nssl1249-C【数论】
  7. POJ2228-Naptime【环形结构上的dp】
  8. Codeforces Round #672 (Div. 2)
  9. SpringBoot使用日志
  10. 初级Java开发与架构之间的差距不仅仅是开发时间