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,一经查实,立即删除!

相关文章

矩阵相乘的strassen算法_矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)...

矩阵乘法的Strassen这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率。先来看看咱们在高等代数中学的普通矩阵的乘法两个矩阵相乘上边这种普通求解方法的复杂度为: O(n3)也称之为暴力求解或者朴素求解这是暴力求解的代码,三重循环&#xff…

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

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

springboot 注解动态赋值_SpringBoot 使用 @Value 注解读取配置文件给静态变量赋值

1、application.properties 配置文件CxU免费资源网mail.usernamexue163.commail.passwordxuemail.hostsmtp.163.commail.smtp.authtrue2、给普通变量赋值,直接在变量上添加 Value 注解CxU免费资源网import org.springframework.beans.factory.annotation.Value;publ…

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

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

ceph与hdfs的比较_分布式存储中HDFS与Ceph两者的区别是什么,各有什么优势?

过去两年,我的主要工作都在Hadoop这个技术栈中,而最近有幸接触到了Ceph。我觉得这是一件很幸运的事,让我有机会体验另一种大型分布式存储解决方案,可以对比出HDFS与Ceph这两种几乎完全不同的存储系统分别有哪些优缺点、适合哪些场…

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

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

2080ti服务器支持什么系统,2080ti深度学习性能

AI开发平台ModelArtsModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周…

pythonset是什么类型的游戏_Python集合(set)类型的操作

原文详见:http://blog.csdn.net/business122/article/details/7541486python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等…

服务器选购seo优化规则,网站seo优化注意事项1—域名和服务器选择

原标题:网站seo优化注意事项1—域名和服务器选择一个网站的域名和服务器是很重要的,这关乎网站的优化前提,作为一个seo优化人员必须要对自己网站的域名和服务器有所了解。网站seo优化注意事项1:域名的关联性域名怎么选择呢&#x…

as cast float server sql_Sql Server中Float格式转换字符串varchar方法(转)

SELECT CONVERT(varchar(100), CAST(testFloat AS decimal(38,2)))SELECT STR(testFloat, 38, 2)从Excel中导入到sql2000,有一列“联系方式”变成了float类型,我想转换成nvarchar类型,用下面的语句select convert(nvarchar(30),convert(int,联…

openjpa_OpenJPA:内存泄漏案例研究

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

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

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

ffmpeg 缩放算法_图像尺寸调整算法介绍并手动实现近邻算法

课程更新完毕,后面会根据同学的意见维护此课程课程讲师:【夏曹俊】课程基于opencv**版3.2讲解,全部使用**的c接口,旧的接口会逐步被opencv抛弃,所以我们学习还是尽量学习新的接口,QT使用**的5.8版本&#x…

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

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

gradle web_简单的Gradle Web应用程序

gradle webGradle通过“ war”和“ jetty”插件轻松支持Java Web应用程序。 本教程将向您展示如何快速创建一个简单的Java Servlet Web应用程序。 我们的基本项目结构将是: basic-websrcmainjavacomcodetutrHelloWorldServlet.javawebappWEB-INFweb.xml首先&#x…

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

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

centos格式化优盘命令_u盘格式化工具fat32u盘安装centos6.5

3、声卡驱动不完全匹配,重装下声卡驱动(这种情况很少)朋友电脑开不了机,找我帮他看看,雨林木风win10家庭版,他电脑系统是有做过备份的现在做64位系统引起的■灵活设置背景2、电脑主板电池怎么换新的主板电池不贵的,才不…

maven 安装本地jar_使用Maven安装本地jar

maven 安装本地jar1.问题与选择 Maven是一种非常通用的工具,其可用的公共存储库首屈一指。 但是,总会有一个不在任何地方托管的工件,或者托管该工件的存储库有依赖的风险,因为当您需要它时,它可能不会启动。 发生这种情…

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

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

redis集群scan_Redis scan命令的一次坑

Redis作为当前服务架构不可或缺的Cache,其支持丰富多样的数据结构,Redis在使用中其实也有很多坑,本次博主遇到的坑或许说是Java程序员会遇到的多一点,下面就听博主详细道来。线上服务堵塞String key keyOf(appid);int retryCount…