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

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登录界面命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据追加用什么函数_RL用算法发现算法:DeepMind 数据驱动「价值函数」自我更新,14款Atari游戏完虐人类!...

【新智元导读】击败卡斯帕罗夫的「深蓝」并不是真正的人工智能&#xff0c;它过度依赖了人类设计的规则&#xff0c;而最近DeepMind的一项深度强化学习新研究表明&#xff0c;不用人工介入&#xff0c;完全数据驱动&#xff0c;算法自己就能发现算法。「深蓝」并非以智取胜&…

@cacheable 是否缓存成功_缓存策略:如何使用缓存来减少磁盘IO?

现代的消息队列&#xff0c;都使用磁盘文件来存储消息。因为磁盘是一个持久化的存储&#xff0c;即使服务器掉电也不会丢失数据。绝大多数用于生产系统的服务器&#xff0c;都会使用多块儿磁盘组成磁盘阵列&#xff0c;这样不仅服务器掉电不会丢失数据&#xff0c;即使其中的一…

g++ 安装python_以后再也不用“教程”:让人举一反三的python配置环境过程 + 超简单原理概括!...

前言&#xff1a; 前一阵子至少指导了5位学弟学妹小伙伴配置 python 环境。两年前我入门 python 时&#xff0c;也得照着互联网上的资料&#xff0c;一步一步“照猫画虎”&#xff1b;为什么现在自己可以“凭感觉”一气呵成了呢&#xff1f;我想&#xff0c;原因必然是自己对于…

通过Java和Spring Boot应用程序将Gmail用作SMTP服务器

Gmail用户可以使用Gmail的SMTP服务器smtp.gmail.com从其Spring Boot应用程序发送电子邮件。 为此&#xff0c;让我们在应用程序中进行一些设置&#xff1a; 在application.properties文件中提供SMTP连接属性&#xff1a; spring.mail.hostsmtp.gmail.com spring.mail.username…

java面向对象类似atm的题_Java面向对象练习题之银行存取款

编写Java应用程序。首先定义一个描述银行账户的Blank类&#xff0c;包括成员变量“账号”和“存款余额”&#xff0c;成员方法有“存款”、“取款”和“余额查询”。其次&#xff0c;编写一个主类&#xff0c;在主类中测试Blank类的功能。String ZhangHao;double YuE;Blank(Str…

mongodb如何写入图片_CTO之瞳-数据库-MongoDB

MongoDB&#xff0c;常用的NoSql数据库&#xff0c;在https://db-engines.com/en/ranking 里被分类为文档型数据库。​本文从以下五个方面来了解MongoDB (和上一篇一样&#xff0c;基础操作请查询官方文档或者菜鸟教程&#xff09;使用场景存储引擎性能测试索引-B树分片与复制1…

小波滤波器与其他滤波器的区别_滤波器国产 VS 国外

一、滤波器技术及产品类型详细分析几次技术应用的潮流引领了声波射频滤波器技术的发展&#xff0c;而SAW滤波器可以说是军用转民用的技术典范。早期国内的SAW滤波器仅用于国防如雷达、通信等方面需求&#xff1b;而该技术的第一次民用&#xff0c;即用于彩电产业&#xff0c;带…

Unix/Linux/BSD 它们之间的关系以及各自派系的介绍

文章目录一、Unix 是什么二、Unix 派系&#xff08;一&#xff09;BSD 分支1.BSD 是什么2.由 BSD 衍生的闭源 Unix 版本3.由 BSD 衍生的开源 Unix 版本&#xff08;二&#xff09;System V 分支1.System V 是什么2.System V 与 BSD 的版权纠纷&#xff0c;以及 UnixWare 的由来…

arraylist获取前多少位_Java 面试题 :百度前 200 页都在这里

作者&#xff1a;唐尤华&#xff0c;基本概念操作系统中 heap 和 stack 的区别什么是基于注解的切面实现什么是 对象/关系 映射集成模块什么是 Java 的反射机制什么是 ACIDBS与CS的联系与区别Cookie 和 Session的区别fail-fast 与 fail-safe 机制有什么区别get 和 post请求的区…

航空订票系统界面java_Java命令行界面(第21部分):航空公司2

航空订票系统界面java本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库。 Airline 2的GitHub项目页面描述了该库&#xff0c;“ Airline是一个Java库&#xff0c;提供了基于注释的框架来解析命令行界面。” 该页面进入状态&#xff1a;航空公司“同时支持…

python爬虫数据_python爬取数据分析

一.python爬虫使用的模块 1.import requests 2.from bs4 import BeautifulSoup 3.pandas 数据分析高级接口模块 二. 爬取数据在第一个请求中时, 使用BeautifulSoupimport requests # 引用requests库 from bs4 import BeautifulSoup # 引用BeautifulSoup库 res_movies requests…

java 迁移数据_Java 9迁移指南:七个最常见的挑战

java 迁移数据我敢肯定&#xff0c;您已经听说过更新到Java 9并不是一件容易的事&#xff0c;甚至可能是不兼容的更新&#xff0c;而且对于大型代码库而言&#xff0c;迁移毫无意义。 这样做之后&#xff0c;我迁移了一个相当大的旧代码库&#xff0c;我可以告诉你&#xff0c;…

markdown java 代码高亮_MarkdownPad2使用代码高亮插件

MarkdownPad 2有插入代码块的功能&#xff0c;但样式却不尽人意&#xff0c;但又不想换个编辑器&#xff0c;找了挺多相关资料&#xff0c;最后在MarkdownPad 2集成prettify高亮插件。如下相关资料&#xff1a;你可以下载后引用&#xff0c;也可以直接引用bootcdn。具体步骤&am…

需求调研 现有系统梳理_对速度的需求,访问现有数据的速度提高了1000倍

需求调研 现有系统梳理了解如何通过使用标准Java 8流和Speedment的In-JVM-Memory加速器将分析数据库应用程序加速1000倍。 Web和移动应用程序有时会很慢&#xff0c;因为后备数据库很慢和/或与数据库的连接施加了延迟。 现代的UI和交互式应用程序需要快速后端&#xff0c;并且…

order by 影响效率么_提升开发效率N倍的20+命令行神器

图 by&#xff1a;石头青海湖关于作者&#xff1a;程序猿石头(ID: tangleithu)&#xff0c;现任阿里巴巴技术专家&#xff0c;清华学渣&#xff0c;前大疆后端 Leader。以每篇文章都让人有收获为目的&#xff0c;欢迎关注&#xff0c;交流和指导&#xff01;背景本文主要来源于…

超级酒吧女生Java下载_超真实分享:一个人去酒吧的经验+注意事项

原标题&#xff1a;超真实分享&#xff1a;一个人去酒吧的经验&#xff0b;注意事项今天想跟大家分享我自己一个很奇妙也很特别的经验&#xff0c;就是关于我自己一个人去酒吧喝酒的故事&#xff5e;对这个故事有好奇心的女孩欢迎跟我一起聊聊&#xff5e;我的个性很独立而且蛮…

java parse_Java命令行界面(第9部分):parse-cmd

java parseparse-cmd库由单个类ParseCmd.java组成&#xff0c;该类是“用于在Java应用程序中定义和解析命令行参数的Java类。” 该库托管在Google Code存档上 &#xff0c;因此可以随时关闭 。 该JAR似乎也可以在GitHub上使用 。 这篇文章介绍了如何使用parse-cmd 0.0.93处理Ja…

mysql 聚簇索引和非聚簇索引_MySQL学习之——索引

转自&#xff1a;CSDNMySQL是目前绝大多数互联网公司使用的关系型数据库&#xff0c;它性能出色、资源丰富、成本低廉&#xff0c;是快速搭建互联网应用的首选关系型数据库。但是&#xff0c;俗话说&#xff0c;“好马配好鞍”&#xff0c;仅仅会使用MySQL是不够的&#xff0c;…

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

java登录界面命令picocli主页面将picocli描述为“强大的微小命令行界面”&#xff0c;“ picocli”是一个单文件Java框架&#xff0c;用于解析命令行参数并生成精美&#xff0c;易于定制的用法帮助消息。 有颜色。” 这篇文章简要概述了如何使用Picocli 0.9.7处理Java代码中的命…

navicat运行sql文件慢_SQL进阶之路——入门

一、初步了解SQL数据库&#xff1a;用来存放数据关系数据库&#xff1a;1.含有多张表 2.各表之间有关系关系数据库中表的样式&#xff1a;a.每个表1个表名 b.每个表中包含记录列名的列和记录数据的行 c.利用主键用来标识数据的唯一性关系数据库中每个表之间如何建立联系&#x…