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

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

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

相关文章

dnf用虚拟机会被制裁吗_DNF: 神豪奶妈扬言, 战斗力没有超过他的, 都不配被加buff!...

要说到现在的年轻人们的交友方式绝对少不了游戏交友&#xff0c;以前的人们只要不出门那就是与世隔绝&#xff0c;而现在就算是不出门也可以在网络上结交一大帮朋友&#xff0c;游戏就是现在的年轻人们交友最多的地方之一。科技的发展让游戏进入了一个繁荣的春天&#xff0c;不…

什么叫轻量瓷_为什么说陶瓷是华夏文明的徽章?

一、先说何为徽章&#xff1f;徽&#xff0c;最基本的解释是标志、符号&#xff1b;章&#xff0c;基本释义较多&#xff0c;其之一为佩戴在身上的标志&#xff0c;如领章、胸章等。徽章&#xff0c;也就是佩戴在身上用以表示身份、职业或者荣誉的标志。徽章的作用是明确身份、…

Java命令行界面(第10部分):picocli

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

workunit 的指的工作单元是什么_分频器是做什么用的?

由于现在的音箱几乎都采用多单元分频段重放的设计方式&#xff0c;所以必须有一种装置&#xff0c;能够将功放送来的全频带音乐信号按需要划分为高音、低音输出或者高音、中音、低音输出&#xff0c;才能跟相应的喇叭单元连接&#xff0c;分频器就是这样的装置。如果把全频带信…

合并不同gdb下的相同要素_GDB调试学习

简介GDB是GCC的调试工具。其功能如下&#xff1a;启动程序&#xff0c;使程序按自定义形式运行&#xff1b;使程序停止指定断点位置&#xff1b;程序停止后&#xff0c;检查程序执行中的相应情况&#xff1b;动态改变程序执行环境。gdb调试能进行GDB调试&#xff0c;一般在编译…

endnote文献顺序编号不对_把Endnote装进大脑:行走的文献管理者

是否还迷失在茫茫的文献海洋&#xff0c;东翻西找&#xff0c;仍无法获得需要的文献信息&#xff1f;是否还在半手动导入参考文献&#xff0c;费时费力&#xff1f;别着急&#xff0c;文献管理神器-Endnote轻松帮你搞定这些问题。把Endnote“装进”大脑&#xff0c;你就能成为行…

蔡司三坐标_蔡司三坐标测针的安装指南

1、装配和辅助工具合适的辅助工具可以在组装测针组时有效防止各部件的损坏&#xff0c;确保安装的安全进行。下面是几种最重要的装配和辅助工具。2、正确调整MT/VAST吸盘MT/VAST吸盘可以通过顶部的三个螺丝进行旋转调节。必须使用不超过2Nm的扭力紧固&#xff0c;为了防止螺丝的…

三电平igbt死区时间计算_IGBT基础与运用-2

IGBT基础与运用-1尝试去计算IGBT的开启过程&#xff0c;主要是时间和门电阻的散热情况。C.GE 栅极-发射极电容C.CE 集电极-发射极电容C.GC 门级-集电极电容(米勒电容)Cies CGE CGC 输入电容Cres CGC 反向电容Coes CGC CCE 输出电容根据充电的详细过程&#xff0c;可以下图…

在2017年从Maven工件生成P2存储库

几年前&#xff0c;我写了一篇博客文章&#xff0c;介绍如何基于Maven工件生成P2存储库。 如今&#xff0c;这种描述的方法已经过时了&#xff0c;我想展示一种基于p2-maven-plugin的新方法&#xff0c;该方法是为解决该问题而创建的。 Maven构建生命周期中的P2-Maven-Plugin集…

循环次数几次_圆柱模板循环使用次数是多少呢

对于同一处做同样的工程&#xff0c;如果需要使用的是圆柱模板&#xff0c;用户一定考虑到底该进多少货&#xff0c;备多少料(圆柱模板)呢&#xff1f;这就需要考虑到圆柱模板循环使用次数和错开的程度来进行决定的&#xff1f;建筑圆柱模板能周转几次&#xff1f;这可能是所有…

network 拦截不到东西是怎么做到的?_都说读中职院校学不到东西,中职学生到底是怎么学习的?...

中职院校在社会中的影响一直并不是很好&#xff0c;一直都是负面影响高于正面影响&#xff0c;那么&#xff0c;我们不禁就要问了&#xff0c;一直在喊提升中职院校的教学质量&#xff0c;质量提升到哪里去了呢&#xff01;那些中职院校里的学生到底又是怎么学习的呢&#xff1…

数组中查找並返回数组_java数组查找常见情况

一.最简单的查找元素方法&#xff08;依次比较&#xff09;&#xff1a;给一个数组&#xff0c;在数组里面查找某个元素在数组中的位置&#xff0c;并返回它的位置。public static void main(String[] args) {int arr[] new int[]{12, 4, 54, 57, 87, 3, 41, 1, 3, 4, 1, 3, 4…

阿帕奇跨域_阿帕奇骆驼遇见Redis

阿帕奇跨域键值商店的兰博基尼 Camel是最好的面包集成框架&#xff0c;在本文中&#xff0c;我将向您展示如何通过利用另一个出色的项目Redis使它更加强大。 Camel 2.11即将发布&#xff0c;具有许多新功能&#xff0c;错误修复和组件。 这些新组件中的几个是我创作的&#…

误码率越高越好还是越低越好_ISO永远都是越低越好?不一定!这些情况下要用高 ISO!...

关于摄影中的参数&#xff0c;在说到 ISO(感光度)的时候&#xff0c;大家脑海中肯定都会想到那句摄影中的定律——“使用尽可能低的 ISO ”&#xff0c;这是为什么呢&#xff1f;通过下面这张典型的高 ISO 照片我们能知道原因在图片里&#xff0c;那些不自然的、充斥整个画面的…

如何在Java 8中创建线程安全的ConcurrentHashSet?

在JDK 8之前&#xff0c;还没有办法在Java中创建大型的线程安全的ConcurrentHashSet。 java.util.concurrent包甚至没有一个名为ConcurrentHashSet的类&#xff0c;但是从JDK 8开始&#xff0c;您可以使用新添加的keySet&#xff08;默认值&#xff09;和newKeySet&#xff08;…

删除 多个表_合并汇总多个工作簿多个工作表,删除修改新增更新内容只需刷新...

要求&#xff1a;1、把多个工作簿的多个工作表内容合并汇总2、后续在任一工作表内删除修改新增内容&#xff0c;无需再重新做表3、后续在任一工作簿中新增一个或多个工作表&#xff0c;无需再重新做表4、后续在文件夹中添加一个或多个Excel工作簿文件&#xff0c;无需再重新做表…

OAuth2,JWT,Open-ID Connect和其他令人困惑的事物

免责声明 如果觉得我必须从一个重要的免责声明开始这篇文章&#xff1a; 不要太相信我要说的话。 我之所以这样说&#xff0c;是因为我们正在讨论安全性。 而且&#xff0c; 当您谈论安全性时&#xff0c;除了100&#xff05;正确的陈述外&#xff0c;还有冒任何其他风险的风险…

人工智能在建筑运营_打造智能建筑商

人工智能在建筑运营构建API时&#xff0c;您应始终考虑谁将使用它。 当API简单易用时&#xff0c;用户就会感到满意。 当用户满意时&#xff0c;每个人也都会满意。 但是出色的可用性并非总是容易实现的。 有一些模式对此有所帮助&#xff0c;在这篇文章中&#xff0c;我将重点…

alinq mysql_ALinq让Mysql变得如此简单_MySQL

当大家已经习惯了使用.net 去操作SQL Server&#xff0c;有多少人曾经尝试过使用.net 去操作Mysql数据库&#xff01;在.net 的光环下&#xff0c;Mysql是显得如此微不足道&#xff01;但是Mysql的开源又是如此具有诱惑。1. ADO.NET 方式连接Mysql数据库经过在网上查找资料&…

debian php mysql 安装_在 Debian 下安装 Apache,MySQL,PHP

我是转载过来的&#xff0c;原地址 http://blog.csdn.net/youngdze/article/details/20455557 ,我安装成功!首先&#xff0c;对你的源进行更新&#xff1a;$ sudo apt-get update第一步--安装 ApacheApache 是一个开源软件&#xff0c;它目前运行在全球超过 50% 的服务器上&…