Java命令行界面(第15部分):Jargo

Jargo在其GitHub主页上定义为“一种减轻程序参数/选项处理的工具”。 当已经存在许多其他命令行处理库时,该页面为另一个命令行处理库提供了基本原理 ,该列表的顶部是“因为类型安全性,不变性和可读性很重要”。

Jargo的选项“定义”阶段使用Argument类的通用类型的实例。 这些Argument实例是通过Arguments类上的静态方法创建的,以建立类型,然后使用生成器样式的方法来描述选项。 在下一个屏幕快照中对此进行了演示,该快照描述了文件路径/名称和详细程度的选项定义(完整的代码清单可在GitHub上找到 )。

Jargo的“定义”舞台

final Argument<String> filePathAndName= stringArgument().description("Path and name of file.").names("--file", "-f").required().build();
// Use optionArgument() instead of booleanArgument() to avoid need
// to specify true or false as arguments to --verbose/-v option
final Argument<Boolean> verbose= optionArgument("--verbose", "-v").description("Enables verbosity.").names("--verbose", "-v").defaultValue(false).build();

上面显示的stringArgument()optionArgument()方法在静态导入(未显示)的Arguments类上调用。 需要将optionArgument()方法用于详细程度标志,以避免要求在详细程度标志后显式声明为truefalse

“解析”阶段是使用CommandLineParser类及其流利的API方法实现的,如下面的代码清单所示。

final ParsedArguments parsedArguments= CommandLineParser.withArguments(filePathAndName, verbose).parse(arguments);

CommandLineParser提供的ParsedArguments实例可用于“询问”阶段。 这是通过在ParsedArguments实例上调用“ get”方法并将适当的Argument实例传递给它来完成的。 下一个代码清单演示了这一点。

Jargo的“审讯”阶段

out.println("File path/name is '" + parsedArguments.get(filePathAndName)+ "' and verbosity is set to '" + parsedArguments.get(verbose) + "'.");

以下屏幕快照描述了Jargo的用法。 第一个屏幕快照演示了未指定必需选项时发生的异常堆栈跟踪,第二个屏幕快照演示了正在使用的长和短选项名称。

第一个屏幕快照中显示的堆栈跟踪不是通知用户未指定必需选项的最佳方法。 Jargo通过捕获ArgumentException并调用其getMessageAndUsage()方法来允许返回更好的消息。 可以在GitHub上看到此代码,结果显示在下一个屏幕快照中。

屏幕快照表明已显示在Argument的实例中提供的信息。 Jargo还允许在指定“ help”参数时显式引发异常以提供此信息。 这利用了Arguments类上的静态方法helpArgument() ,其用法示例包含在GitHub代码清单中 。

选择框架或库来帮助使用Java进行命令行解析时,Jargo的特性应予以考虑。

  • Jargo是开源的,并根据Apache License 2.0版获得许可 。
  • Jargo的jargo-0.4.1.jar大小约为177 KB,但它对更大的Guava库具有运行时依赖性。
    • 严格来说,对Guava的依赖是一个故意的决定,如Jargo的基本原理所述 :“因为我爱Guava,并希望将一个参数解析库与之很好地集成在一起(该部门将提供更多信息)。”
  • Jargo使用强类型的API调用以编程方式配置预期的命令行选项,而不是使用批注和/或反射。
  • 在拥有如此多基于Java的命令行处理库的领域中,对于希望使用Jargo的Rationale列出的命令行处理库的所有属性来解释为什么另一个库的开发人员来说,Jargo最有可能成为重要的竞争者。这个拥挤的空间得以开发。

Jargo是一个易于使用的库,用于处理Java中的命令行选项,并利用通用类型的类和特定于类型的静态方法来增强命令行选项的类型安全性。 Jargo需要Guava才能运行,因此最适合已在使用Guava的应用程序。 如果Jargo基本原理中的所有项目对于该开发人员都很重要,则开发人员可能会认真考虑Jargo而不是其他基于Java的替代命令行处理库。

其他参考

  • Jargo (GitHub)
  • Maven上的Jargo ( Maven存储库 )

翻译自: https://www.javacodegeeks.com/2017/09/java-command-line-interfaces-part-15-jargo.html

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

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

相关文章

java中序列化与反序列化_Java中的序列化

java中序列化与反序列化Java提供了一种称为序列化的机制&#xff0c;以按字节的有序或字节序列的形式持久化Java对象&#xff0c;其中包括对象的数据以及有关对象的类型和存储在对象中的数据类型的信息。 因此&#xff0c;如果我们已序列化了任何对象&#xff0c;则可以使用对象…

Java命令行界面(第3部分):jbock

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

java collection详解_java 7 collection 详解(一)

一、综述java集合框架定义了几个接口&#xff0c;这些接口决定了collection类的基本特性。不同的是&#xff0c;具体类仅仅是提供了标准接口的不同实现&#xff0c;如图&#xff0c;java集合框架接口图从图可知&#xff0c;java集合类的主要是由两个接口派生而出——Collection…

jsf tree组件_JSF:在传统组件和时尚性能杀手之间进行选择

jsf tree组件这篇博客文章起源于一个大型Web应用程序中的性能问题。 每个人都优化Java代码&#xff0c;但似乎没有人尝试优化JavaScript代码。 奇怪&#xff0c;因为在客户端有很多改进的空间。 我会说&#xff0c;甚至比服务器端还要多。 我们将分析可编辑的JSF标准组件&#…

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

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

spring javafx_带有Spring的JavaFX 2

spring javafx我将从一个大胆的声明开始&#xff1a;我一直很喜欢Java Swing或applet。 在那里&#xff0c;我说了。 如果我进行一些自我分析&#xff0c;那么这种钦佩可能是在我接触Java时开始的。 Swing&#xff08;实际上&#xff09;是我使用Java所做的第一件事&#xff0c…

jframe和mysql登陆_刚写的一个从数据库读取账户和密码进行登陆的小程序~高手请无~...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.*; import javax.swing.*;public class LoginSystem extends JFrame{publi…

mycat mysql 物理部署_一、MyCat的搭建

一、什么是mycat简单直接点就是&#xff0c;MyCat其实就是一个数据库的中间件&#xff01;一般我们都是app直接到数据库&#xff01;有了MyCat以后&#xff0c;就是app到MyCat然后再访问数据库。mycat是个中间件&#xff0c;它负责连接管理mysql,应用程序连接mycat,把mycat当作…

Apache Camel中的短重试与长重试

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

java实现驾校考试系统_jsp驾校考试系统

本驾校考试系统采用了Browser/Server体系结构&#xff0c;JSP(Java Server Page)作为前台开发工具&#xff0c;MySQL作为后台数据库进行开发。最终系统实现的系统将分为管理员和学员两个角色&#xff0c;其中系统管理员部分的主要功能包括修改登录密码、学员信息管理、科目1题目…

java qlv转mp4 代码_怎么将qlv格式转换成mp4?教你快速转换视频格式的技巧

如何将qlv格式转换成mp4?众所周知qlv格式是腾讯视频的下载格式&#xff0c;而qlv格式的特点在于不能用别的播放器打开。如果用腾讯视频以外的播放器打开则需要将qlv格式转换成mp4&#xff0c;那你知道将qlv格式转换成mp4的技巧吗&#xff1f;下面小编教你一种转换qlv格式的技巧…

mysql导入竖杠分割的数据_MYSQL :逗号分隔串表,分解成竖表

DROP TEMPORARY TABLE IF EXISTS Temp_Num ;CREATE TEMPORARY TABLE Temp_Num ( xh INT PRIMARY KEY ); -- 创建数字辅助表SET i 0;INSERT INTO Temp_Num(xh) -- 写入数字辅助表SELECT i : i1FROM AdDataCenter.Ad_Targeting_Mobisage aLIMIT 0, 100 ;SELECT b.AdGroupID , SU…

浙大JAVA实验题12_2019浙大计算机考研机试模拟赛(2)——概念专题

题目链接 引用自晴神OJA - 边覆盖B - 极大独立集C - 稳定婚姻问题D - 笛卡尔树没赶得上全程的比赛&#xff0c;就做了两道&#xff0c;后面两道以后有时间再补。两道都是概念题&#xff0c;比较基础~ 以下是题解A - 边覆盖Case Time Limit: 200 MS (Others) / 400 MS (Java) …

hadoop小型集群_小型Hadoop集群的Ganglia配置和一些故障排除

hadoop小型集群Ganglia是一个针对大型集群的开源&#xff0c;可扩展且分布式的监视系统。 它收集&#xff0c;汇总并提供数十种与计算机相关的指标&#xff08;例如CPU&#xff0c;内存&#xff0c;存储&#xff0c;网络使用情况&#xff09;的时序视图。 您可以在UC Berkeley …

spring aop组件_安全性中的Spring AOP –通过方面控制UI组件的创建

spring aop组件以下文章将显示在我参与的一个项目中&#xff0c;我们如何使用Spring的AOP来介绍一些与安全性相关的功能。 这样的概念是&#xff0c;为了使用户能够看到某些UI组件&#xff0c;他需要具有一定级别的安全特权。 如果不满足该要求&#xff0c;则不会显示UICompone…

使用Spring Boot构建RESTFul服务

每个人都在谈论微服务&#xff0c;例如WSO2微服务框架 &#xff0c; Spring Boot等。由于我已经很长时间没有从事任何与Spring相关的项目了&#xff0c;所以我想到了使用Spring Boot实现一个简单的RESTFul服务。 因此&#xff0c;我从Spring文档开始。 这很简单。 您可以使用“…

将Swagger与Spring Boot REST API集成

在上一篇文章中&#xff0c;我谈到了我使用Spring Boot创建RESTFul Services的经验。 在创建REST API时&#xff0c;正确的文档是其中的必需部分。 昂首阔步是什么&#xff1f; Swagger &#xff08;Swagger 2&#xff09;是用于描述和记录REST API的规范。 它指定了REST Web…

php滴滴平台接口,图片服务API文档

简介滴滴云图片服务API提供标准的轻量级无状态HTTP接口&#xff0c;支持用户对数据的全方位管理。接口概览API描述图片信息获取文件的基本信息&#xff0c;包括长度、宽度、文件大小、格式。图片旋转将图片按顺时针旋转。图片模糊对图片进行模糊操作。图片缩放将图片缩小或者放…

java遇上html,JAVA遇见HTML——JSP篇:JSP内置对象(上)

JSP九大内置对象JSP内置对象是Web容器创建的一组对象&#xff0c;不使用new关键就可以使用的内置对象。int[] value{60,70,80};for(int i:value){out.println(i);}%>Web程序的请求响应模式用户发送请求(request)服务器给用户响应(response)out对象&#xff1a;out对象是JspW…

java中接口文件创建_功能接口简介–在Java 8中重新创建的概念

java中接口文件创建世界各地的所有Java开发人员都将至少使用以下接口之一&#xff1a;java.lang.Runnable&#xff0c;java.awt.event.ActionListener&#xff0c;java.util.Comparator&#xff0c;java.util.concurrent.Callable。 声明的接口之间有一些共同的特征&#xff0c…