Java命令行界面(第6部分):JOpt简单

JOpt Simple的主页将这个基于Java的库称为“用于解析命令行选项的Java库,例如您可能传递给调用javac的Java库,”该Java库试图“使用POSIX getopt()的命令行选项语法)和GNU getopt_long() 。” 这是我使用Java进行命令行参数处理系列文章的第六篇,其重点是JOpt Simple 。

在本系列的Java命令行处理中,我回顾过的大多数库都以某种方式使用了注释。 像Apache Commons CLI一样 ,JOpt Simple不使用注释。 JOpt Simple改为支持“流畅的界面”。 原始帖子的示例(代码清单)和输出(屏幕快照)基于JOpt Simple 4.9进行编译和运行,但是当我使用JOpt Simple 5.0.3进行编译和运行时,它们对我的工作方式相似(且无需更改代码)。 。

下一个代码清单演示了使用JOpt Simple进行命令行处理的“定义”阶段,该示例有意类似于先前有关Java命令行处理的文章中所使用的示例。

在JOpt Simple中定义命令行选项

final OptionParser optionParser = new OptionParser();
final String[] fileOptions = {"f", "file"};
optionParser.acceptsAll(Arrays.asList(fileOptions), "Path and name of file.").withRequiredArg().required();
final String[] verboseOptions = {"v", "verbose"};
optionParser.acceptsAll(Arrays.asList(verboseOptions), "Verbose logging.");
final String[] helpOptions = {"h", "help"};
optionParser.acceptsAll(Arrays.asList(helpOptions), "Display help/usage information").forHelp();

此代码清单演示了如何使用“流利的API”方法定义命令行选项。 实例化一个OptionParser ,然后为每个潜在的命令行选项调用其重载的acceptsAll方法之一。 使用acceptsAll可以将多个标志/选项名称与单个选项相关联。 对选项同义词的这种支持允许对同一选项使用“ -f”和“ -file”。

上面的代码演示了可以通过.required()方法调用根据需要指定命令行选项。 在这种情况下,需要一个“文件”。 如果期望将参数与选项/标志关联放置在命令行上,则可以使用withRequiredArg()方法。 上面的代码清单中的“ help”选项利用forHelp()方法告诉JOpt Simple,如果与forHelp()关联的选项位于命令行中,则如果命令行中未包含必需的选项,则不要抛出异常。命令行。 在我的示例中,这可以确保操作员可以使用-h--help来运行应用程序,而无需任何其他必需的选项,并且可以避免引发异常。

“ JOpt简单用法示例”页面提供了有关定义命令行选项时可用的许多不同可能性的重要详细信息,并使用基于JUnit的断言来演示这些用于定义命令行选项的不同策略如何不同地配置所解析的内容。 上面显示的我的代码清单仅显示了可用内容的一小部分。 请注意, OptionParser类的Javadoc注释也包含重要的细节。

如果一个人静态地导入 Arrays.asList并将潜在的命令行选项的名称作为字符串直接传递给该asList(String ...)方法,而不是使用我创建字符串数组的方法,则上面的代码会更加简洁。首先,然后将它们转换为列表。 我在介绍性文章中使用了这种方法,以很清楚地说明正在发生的事情,但是与该文章在GitHub上相关的代码版本可能会更改为使用静态导入方法。

使用JOpt Simple进行命令行处理的“解析”阶段非常简单:

final OptionSet options = optionParser.parse(arguments);

使用JOpt Simple进行“解析”需要调用OptionParser.parse(String…)方法

使用JOpt Simple进行命令行处理的“询问”阶段也很简单,将在下一个代码清单中进行演示。

out.println("Will write to file " + options.valueOf("file") + " and verbosity is set to " + options.has("verbose"));

单行代码演示了询问是由解析调用返回的OptionSet实例上调用便捷方法组成的。 在这种情况下,在OptionSet上调用的两个演示方法是OptionSet.valueOf(String)和OptionSet.has(String) 。

JOpt Simple还支持自动生成用法/帮助语句。 下一个代码清单演示了如何执行此操作。

optionParser.printHelpOn(out);

刚刚显示的单行代码将OptionParser实例生成的用法/帮助信息写入通过其printHelpOn(OutputStream)方法提供给它的输出流。

上面显示了应用JOpt Simple所需的最重要的代码,是时候看看使用此代码的简单应用程序的行为了。 以下屏幕快照演示了实际的代码。 第一个屏幕快照演示了未提供所需的“文件”命令行选项时打印的MissingRequiredOptionsException 。

下一个屏幕快照演示了如何在命令行中指定“文件”和“详细”选项。

在下一个屏幕快照中将演示JOpt Simple提供的自动使用/帮助消息。

在选择框架或库来帮助使用Java进行命令行解析时,需要考虑以下Apache Commons CLI的其他特征。

  • JOpt Simple是开源的,并根据MIT许可获得许可 。
  • 在撰写本文时,JOpt Simple的最新版本是5.0.3和6.0 Alpha 1;而最新版本是5.0.1和6.0。 本文中使用了JOpt Simple 4.9( JOpt Simple更改日志中当前列出的最新版本和Maven依赖示例中当前显示的版本)。
  • jopt-simple-4.9.jar大小约为65 KB,并且对任何第三方库都没有编译时依赖性。
  • JOPT简单的已经或正在使用的几个有影响库和框架。 这些包括Spring框架 (可选的编译依赖性)和JMH (编译依赖性)。
    • JOpt Simple Web页面的主页引用了Mark Reinhold的话 :“我想您可能会对我们在开源Java开发工具包中使用jopt-simple库感兴趣。
  • JOpt Simple已面世几年,但似乎仍在维护(最新的Maven Central是2016年12月)。
  • JOpt Simple不使用注释,而是依靠流畅的API调用。
  • JOpt Simple支持命令行选项之间的关系,例如必需的从属选项 。

当其他受欢迎且有用的工具和库使用该库时,通常这是该库有用的积极信号。 JOpt Simple被选为某些此类工具和库的命令行处理库的选择,无疑与JOpt Simple很好。 对于喜欢使用不使用注释的Java命令行处理的用户,JOpt Simple提供了Apache Commons CLI的有用而强大的替代方法。 JOpt Simple提供的功能远远超过本文中显示的功能,而该功能最好通过阅读基于单元测试的“ 浏览JOpt Simple的功能 ” 来发现 。

其他参考

  • JOpt简单
  • 基于Javadoc的JOpt简单API文档
  • Maven上的JOpt Simple
  • JOpt简单示例
  • JOpt简单与JewelCli
  • JOpt简单与JCommander
  • JOpt Simple的命令行参数

翻译自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-6-jopt-simple.html

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

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

相关文章

计算机c盘哪些东西可以清理,细说电脑c盘哪些文件可以删除

有些网友反映,自己看C盘里的文件太多了,电脑又太卡,情急之下就把里面的东西删掉了,现在系统都不能用了。为了避免大家再入这个坑,我给大家讲一下哪些是C盘里的无用文件,并且删除后不会影响系统使用C盘是指电…

软件测试度量计算方法有哪些,软件测试度量(三)

进度差异趋势6.4.3 范围变化(SC)这个指标指出如何固定测试范围。下面总范围 以前的范围 新范围,如果范围扩大的话总范围 以前的范围 - 新范围,如果范围缩小的话一个发布版本范围变化趋势7、结论度量是评估的重要组成部分以及任何业务改进的基础。是应…

使用带有OAuth的Spring Security保护资源

1.简介 在本教程中,我们将研究如何使用Spring Security和OAuth来基于路径模式( / api / ** )保护服务器上的管理资源。 我们配置的另一个路径模式( / oauth / token )将帮助已配置的授权服务器生成访问令牌。 请注意&a…

openjpa_OpenJPA:内存泄漏案例研究

openjpa本文将提供完整的根本原因分析详细信息以及解决影响Oracle Weblogic Server 10.0生产环境的Java堆内存泄漏(Apache OpenJPA泄漏)的方法。 这篇文章还将演示在管理javax.persistence.EntityManagerFactory生命周期时遵循Java Persistence API最佳实…

美国凯斯西储大学计算机硕士专业怎么样,在凯斯西储大学读硕士大约需要多少花费?...

凯斯西储大学是美国著名大学之一,始建于1826年,坐落于俄亥俄州的克里夫兰,是一所以独立研究闻名的世界顶级私立大学,美国一级国家级大学。美国作为当今世界留学费用最高的国家之一,费用问题是所有赴美留学的学生都非常…

win7如何修改dns服务器地址,Win7系统DNS怎么设置?Win7系统DNS设置方法

Win7系统DNS怎么设置?众所周知,DNS地址是一个域名服务器地址,它可以把用户的网站地址解析成IP地址。如果这个服务器出现问题,可能就上不了网了。我们在使用Win7系统的时候,就是因为域名解析服务器不能将要访问的域名解析为正确的…

密钥文件登录服务器,密钥文件登录云服务器

密钥文件登录云服务器 内容精选换一换远程桌面协议(Remote Desktop Protocol,RDP),是微软提供的多通道的远程登录协议。本节为您介绍如何使用RDP文件远程登录Windows弹性云服务器。从管理控制台下载的RDP文件对应唯一的云服务器,当前RDP文件命…

一个网站服务器有多少个ip,一个服务器可以有多少个ip地址

一个服务器可以有多少个ip地址 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。会话保持,指负载均衡器可以识别客户与服…

jbpm小项目测试_尝试使用jBPM Console NG(测试版)

jbpm小项目测试大家好! 这是有关jBPM Console NG的另一篇文章。 经过6个月的辛苦工作,我很高兴为开发人员社区撰写这篇文章,以进行尝试。 在这篇文章中,我将解释如何从源代码构建应用程序。 这背后的主要思想是知道如何在测试过程…

用友数据库服务器如何修改,用友u8数据库服务器怎么设置

用友u8数据库服务器怎么设置 内容精选换一换本章介绍如何在管理控制台购买GaussDB(for openGauss)实例,并通过内网使用弹性云服务器连接GaussDB(for openGauss)实例。GaussDB(for openGauss)提供gsql工具帮助您在命令行下连接数据库,您需要提前创建一台弹…

hibernate批量查询_使用Hibernate批量获取

hibernate批量查询如果需要从Java处理大型数据库结果集,则可以选择JDBC,以提供所需的低级控制。 另一方面,如果您已在应用程序中使用ORM,则回退到JDBC可能会带来一些额外的麻烦。 在导航域模型时,您将失去诸如乐观锁定…

Java 9迁移指南:七个最常见的挑战

我确定您已经听说过更新到Java 9并不是一件容易的事,甚至可能是不兼容的更新,而且对于大型代码库而言,迁移毫无意义。 这样做之后,我迁移了一个相当大的旧代码库,我可以告诉你,这还不错。 比碰到Java 8确实…

nuxt sass 全局变量的问题_Sass入门教程

SASS(Syntactically Awesome Stylesheet)是一个CSS预处理器,有助于减少CSS的重复,节省时间。 它是更稳定和强大的CSS扩展语言描述文档的风格结构。sass中文网而且Sass算是CSS的超集,它100%兼容CSS的语法,所有在 CSS 中正常工作的代…

用C语言实现优先级排序和MATLABsort函数的比较

为了实现对两个数组进行优先级排序,用c语言有两种实现方法, 一是需要对两个数组进行排序,然后对排序后的坐标再排序,(求最小值是我自己需要) 二是直接寻找数组排序后的元素坐标,调用qsort函数进行排序,排序后的数组会存放在原数组中,那么就有两种寻找坐标,一是寻找…

造成内存泄漏_如何造成内存泄漏

造成内存泄漏这将是一个相当邪恶的职位-当您确实希望使某人的生活陷入困境时,您将在谷歌上搜索。 在Java开发领域,内存泄漏只是您在这种情况下会引入的错误类型。 为您的受害者保证几天甚至几周的办公室不眠之夜。 我们将在这篇文章中描述两次泄漏。 两…

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

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

在建工地扬尘在线监控系统推荐_配电室为何需要安装蓄电池在线监控系统?保定钰鑫电气...

配电室蓄电池在线监控系统提高了蓄电池运行质量、增强了电力系统的安全运行、保障蓄电池运行环境的可靠,打造无人值守配电室、智能化运维模式,减少蓄电池损耗、浪费,降低了维护成本,为何需要安装一套配电室蓄电池在线监测系统&…

最好的Java开发人员测试和集成工具

通过从应用程序中学习企业APM产品,发现更快,更高效的性能监控。 参加AppDynamics APM导览! 无论您是刚开始还是已经使用了一段时间,使用正确的工具进行编程都可以对项目的成功产生巨大的影响。 适当的工具使您可以编写更好的代码…

最速下降法matlab全局最小值_梯度下降概念

1、梯度概念(1)从几何意义上讲,就是函数变化最快的地方。在单变量的函数中,梯度只是导数,其实就是函数在某个给定点的切线的斜率;在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了…

IntelliJ中的远程调试Wildfly应用程序

远程调试Java应用程序意味着使用本地开发环境连接到远程运行的应用程序。 Java开箱即-agentlib:jdwp[options]支持远程调试:目标应用程序必须使用-agentlib:jdwp[options]选项执行, -agentlib:jdwp[options]选项加​​载Java调试线协议(jdwp&…