java args_Java命令行界面(第2部分):args4j

java args

在上一篇文章中 ,我研究了使用Apache Commons CLI在Java应用程序中解析命令行参数。 在本文中,我将使用另一个库args4j进行相同的操作。

args4j采用了一种不同于Commons CLI的方式来指定Java应用程序应期望的命令行参数。 尽管Commons CLI期望代表选项的对象将被单独地且显式地实例化,但是args4j使用自定义注释来促进命令行参数处理的这一“定义”阶段。 命令行选项应该是类上的实例级字段,并带有@ org.kohsuke.args4j.Option批注。 每个命令行参数的特征都包含在此@Option注释的属性中。

本文中演示的简单应用程序与我上一篇文章中使用的应用程序相似,并着重于用于指定详细程度的可选且无值的-v选项,以及所需的-f选项,该选项期望代表文件路径和名称的值。 下一个代码清单演示了如何使用args4j的@Option注释将这些命令行参数设置为类数据成员上的注释。

args4j通过@Option注释定义命令行参数

@Option(name="-v", aliases="--verbose", usage="Print verbose status.")
private boolean verbose;@Option(name="-f", aliases="--file", usage="Fully qualified path and name of file.", required=true)
private String fileName;

如上面的代码清单所示,很容易指定选项的名称,用法以及是否需要(默认是可选的)。 上面的private修饰符的存在使它们很明显是在类级别定义的属性。 因为没有static修饰符,所以我们看到这些是已注释的实例变量。

要解析命令行选项,只需实例化一个CmdLineParser并将命令行参数传递给其parseArguments(String ...)方法:

解析args4j中的命令行参数

final CmdLineParser parser = new CmdLineParser(this);
try
{parser.parseArgument(arguments);
}
catch (CmdLineException clEx)
{out.println("ERROR: Unable to parse command-line options: " + clEx);
}

在刚刚显示的Java代码的第一行中, this是对类实例的引用,在该类实例中定义了上面显示的成员变量并使用@Option注释@Option注释。 在这种情况下,我使用this是因为定义这些选项的同一类是调用此解析方法的类。 为了在同一个类中执行此操作,我需要在类中定义一个名为doMain的实例(非static )方法,并由该类的main函数调用该方法(这在本文结尾处的完整代码清单中显示)。 从类的main(final String[])函数接收的命令行参数是传递给parseArguments(String[])方法的parseArguments(String[])数组。

接下来的两个屏幕快照演示了基于args4j的上述代码在解析命令行参数中的应用。 第一个图像显示了两个选项的短选项和长选项的组合。 第二个图像显示了自动报告未提供必需的命令行参数的情况。

命令行解析库的一个重要功能是能够显示用法或帮助信息。 下一个代码清单演示了使用args4j的CmdLineParser.printUsage(OutputStream)方法执行此操作的示例。

使用args4j打印使用情况信息

final CmdLineParser parser = new CmdLineParser(this);
if (arguments.length < 1)
{parser.printUsage(out);System.exit(-1);
}

下一个屏幕快照描述了args4j默认打印出的使用情况信息。

这篇文章演示了如何使用arg4j实现与Java应用程序中的命令行解析有关的一些最常见功能,包括选项“定义”,命令行参数“解析”,对解析的命令行参数的“询问”以及帮助/ us与命令行参数有关的详细信息。 现在显示了上面在代码清单中部分表示的类的完整代码清单。

args4j演示Main.java的完整代码清单

package examples.dustin.commandline.args4j;import static java.lang.System.out;import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;import java.io.IOException;/*** Demonstrate args4j.*/
public class Main
{@Option(name="-v", aliases="--verbose", usage="Print verbose status.")private boolean verbose;@Option(name="-f", aliases="--file", usage="Fully qualified path and name of file.", required=true)private String fileName;private void doMain(final String[] arguments) throws IOException{final CmdLineParser parser = new CmdLineParser(this);if (arguments.length < 1){parser.printUsage(out);System.exit(-1);}try{parser.parseArgument(arguments);}catch (CmdLineException clEx){out.println("ERROR: Unable to parse command-line options: " + clEx);}out.println("The file '" + fileName + "' was provided and verbosity is set to '" + verbose + "'.");}/*** Executable function demonstrating Args4j command-line processing.** @param arguments Command-line arguments to be processed with Args4j.*/public static void main(final String[] arguments){final Main instance = new Main();try{instance.doMain(arguments);}catch (IOException ioEx){out.println("ERROR: I/O Exception encountered: " + ioEx);}}
}

这是在选择框架或库来帮助Java进行命令行解析时要考虑的args4j的一些其他特征。

  • args4j是开源的,并获得MIT许可证 。
  • 当前版本的args4j( 2.33 ) 需要 J2SE 5 。
  • args4j不需要单独下载或引用任何第三方库。
  • args4j 2.33主JAR( args4j-2.33.jar )的大小约为152 KB。
  • Maven存储库显示了376个对args4j的依赖关系 ,包括OpenJDK的JMH Core和Jenkins (鉴于川口晃介的参与,这并不奇怪)。
  • args4j已经存在了一段时间; 其2.0.3版本于2006年1月发布 ,至少从2003年开始就以某种形式出现。
  • args4j允许通过@Option注释上的“ hidden ”将命令行参数从使用情况输出中排除。
  • args4j允许指定和强制执行命令行参数之间的关系。 这包括指定何时不能同时提供两个参数的能力(“ 禁止 ”),以及仅当还提供了另一个参数时才有意义的参数(“ depends ”)的能力。
  • args4j支持在有限的一组值适用于该选项的情况下使用枚举类型的类属性。 @Option文档在“枚举开关”部分下说明了如何执行此操作。
  • args4j通过其OptionHandler类提供了命令行参数解析的可扩展性和可定制性。

args4j库易于使用,并允许高度可读的代码。 决定是否使用args4j时,最大的考虑因素可能是确定使用批注指定命令行参数定义的舒适程度。

其他参考

  • args4j
  • args4j下载
  • args4j源代码 (GitHub)
  • args4j API文档
  • args4j样本主

翻译自: https://www.javacodegeeks.com/2017/06/java-command-line-interfaces-part-2-args4j.html

java args

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

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

相关文章

apache camel_Apache Camel中的短重试与长重试

apache camel《骆驼设计模式》一书介绍了20种模式以及用于设计基于Apache Camel的集成解决方案的众多技巧和最佳实践。 每种模式都基于真实的用例&#xff0c;并提供了Camel特定的实现细节和最佳实践。 为了让您有这本书的感觉&#xff0c;以下是该书的重试模式摘录&#xff0c…

mega5安装包_[MEGA DEAL] 2017年完全Java捆绑包(95%折扣)

mega5安装包深入了解编程奥德赛&#xff08;58小时&#xff01;&#xff09;&#xff0c;进入最常用的编程语言 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了一个极端的报价 。 我们提供的2017 Complete Java Bundle 仅…

matlab计算微分ppt,matlab-ch013(数值计算-微积分)20090923.ppt

matlab-ch013(数值计算-微积分)20090923.ppt 第13讲 数值计算 —微积分,张建瓴,13.1 数值积分,在工程教学和应用中&#xff0c;除了进行数据逼近外&#xff0c;还要求逼近曲线下面的面积&#xff0c;这就是积分问题。,一、数值积分方法,典型的数值积分方法有&#xff1a;用常数…

JDK 9中不推荐使用Java的Observer和Observable

在博客文章《 应用JDK 9 Deprecated增强功能》中 &#xff0c;我讨论了JDK 9中 Deprecated批注中对forRemoval&#xff08;&#xff09;和since&#xff08;&#xff09;可选元素&#xff08;方法&#xff09;的添加 。 我在那篇文章中说&#xff1a;“在Java SE API上应用新的…

WorkPlus一站式协同解决方案,助力企业降本增效

在企业数字化转型的过程中&#xff0c;很多企业都会遇到一个共同问题&#xff1a;重复建设基础功能&#xff0c;耗费大量时间和资源。为解决这一难题&#xff0c;WorkPlus已经将一些通用、基础且有技术门槛的功能进行了集成与开发&#xff0c;如IM&#xff08;即时通讯&#xf…

linux在oracle新建表,Oracle创建表及管理表

1. Oracle表的创建及管理创建表包括三个要素&#xff0c;表名&#xff0c;列名&#xff0c;数据类型。每个表都有对应不同的列&#xff0c;每个列都有唯一对应的数据类型。常用数据类型简介&#xff1a;数据类型描述CHARACTER(n)字符/字符串。固定长度 n。INTEGER(p)整数值(没有…

Linux 命令之 top -- 实时显示进程动态/查看进程信息

文章目录介绍常用选项交互命令参考示例示例 1&#xff1a;直接输入命令 top 就可以动态显示进程信息统计参数信息详解进程属性说明&#xff08;即进程列表的字段说明&#xff09;其它1.在 top 基本视图中&#xff0c;按键盘数字 1 可以监控每个逻辑 CPU 的状况2.敲击键盘 b&…

oracle同步恢复目录,Oracle创建恢复目录(catalog)

Oracle创建恢复目录(catalog)&#xff0c;在catalog数据库上创建cat用户的表空间。Oracle创建恢复目录1.在catalog数据库上创建cat用户的表空间SQL> create tablespace cat datafile /home/oracle/oradata/orcl/cat.dbf size 512M;2.创建cat用户SQL> Create user cat ide…

java登录界面命令_Java命令行界面(第3部分):jbock

java登录界面命令在本系列中有关使用Java进行命令行分析的前两篇文章中&#xff0c;我介绍了Apache Commons CLI和args4j库。 在本系列的第三篇文章中&#xff0c;我介绍了jbock &#xff0c;它是自我描述的“非常简单的CLI解析器”。 我在Java命令行解析中的帖子使用了一些示…

java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧

java中转json字符串在Java应用程序中工作或进行JSON解析时&#xff0c;通常很常见的做法是从某些资源&#xff08;例如RESTful Web服务&#xff09;中复制粘贴JSON字符串&#xff0c;然后使用Jackson库解析JSON。 这是在Java中测试和学习解析JSON字符串的最快方法&#xff0c;但…

COLLATE oracle,Sql 中Collate用法

今天查询sqlite的时候需要不区分大小写&#xff0c;查了下文档&#xff0c;需要使用collate nocase.顺便学习下collate的用法。collate在sql中是用来定义排序规则的。排序规则其实就是当比较两个字符串时&#xff0c;根据某种规则来确定哪个比较大&#xff0c;是否相等。各个数…

jdeps_JDeps入门–分析项目的依赖关系

jdepsJDeps是Java依赖关系分析工具 &#xff0c;这是一个命令行工具&#xff0c;它处理Java字节码&#xff08;意味着.class文件或包含它们的JAR&#xff09;&#xff0c;并分析类之间静态声明的依赖关系。 可以用各种方式过滤结果&#xff0c;并可以将其汇总到包或JAR级别。 J…

要多大内存才满足_什么是延迟满足能力?“延迟满足”能力对孩子有多重要家长要清楚...

文丨饭饭妈记得去年过春节的时候&#xff0c;家里来了两个亲戚&#xff0c;他们分别有一个小孩&#xff0c;当时大家都在准备年夜饭。其中一份糯米团子准备好放在桌子上之后&#xff0c;亲戚家的两个小孩都非常想要吃&#xff0c;亲戚对孩子说&#xff1a;“你们现在不能吃&…

java端到端_Java应用程序性能监控:复杂分布式应用程序的端到端性能

java端到端通过从您的应用程序学习企业APM产品&#xff0c;发现更快&#xff0c;更有效的性能监控。 参加AppDynamics APM导览&#xff01; 在最复杂和分布式环境中端到端监视Java应用程序性能-专注于业务事务。 自动发现的业务交易&#xff0c;动态基准&#xff0c;代码级诊断…

java jvm虚拟机_Java虚拟机(JVM)简介

java jvm虚拟机什么是JVM Java虚拟机&#xff08;JVM&#xff09;是使计算机能够运行Java程序的抽象计算机。 JVM有三个概念&#xff1a; 1.规格 2.实施 3.实例。 该规范是正式描述JVM实现要求的文档。 具有单一规范可确保所有实现都可互操作。 JVM实现是满足JVM规范要求的…

linux系统引导分区,揭秘Linux(二)——操作系统引导与硬盘分区

通过前面的介绍想必大家对Linux有了个基础的了解&#xff0c;那么各位肯定该说是不是要装操作系统了&#xff0c;对不起让各位失望了&#xff0c;这次所讲解的是Linux运行原理与硬盘分区&#xff0c;这是重中之重啊&#xff01;请一定要细细品读。为了更好地了解Linux系统的运行…

HTTP协议简介_请求消息/请求数据包/请求报文_响应消息/响应数据包/响应报文

文章目录HTTP 介绍请求数据包/请求消息/请求报文请求数据包解析响应数据包/响应消息/响应报文HTTP 介绍 概念&#xff1a;Hyper Text Transfer Protocol 超文本传输协议 传输协议&#xff1a;定义了客户端和服务器端通信时发送数据的格式 特点: 1.基于TCP/IP的高级协议 2.默认…

apache.camel_Apache Camel 2.20发布–新增功能

apache.camelApache Camel 2.20已于今天发布&#xff0c;并且像往常一样&#xff0c;我受命撰写有关此出色新版本及其亮点的博客。 该版本具有以下重点。 1&#xff09;Java 9技术预览支持 我们已经开始支持Java 9的工作&#xff0c;此版本称为技术预览。 源代码在Java 9上…

操作无法完成(错误 0x000006ba),Windows 11 PDF打印机无法使用解决办法

操作无法完成(错误 0x000006ba)&#xff0c;Windows 11 PDF打印机无法使用解决办法 解决方式一 先重启一次电脑&#xff0c;看看是否可以解决问题。 解决方式二 重新启动 Printer Spooler 服务

MyEclipse 的 TCP/IP Monitor 的使用

文章目录步骤 1&#xff1a;新建 web02 工程步骤 2&#xff1a;在 WebRoot 下创建 add_employee.html步骤 3&#xff1a;部署项目步骤 4&#xff1a;启动服务器步骤 5&#xff1a;打开 TCP/IP Monitor步骤 6&#xff1a;增加新的监视器步骤 7&#xff1a;启动监视器步骤 8&…