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

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

我在Java中进行命令行解析的文章使用了一些示例,这些示例基于向Java应用程序提供必需的文件名和可选的详细标志。 本文中使用了相同的方法来演示jbock 1.8 。 GitHub上提供了示例类的完整源代码,但是jbock( Main_Parser )生成的代码不可用,因为它可以生成。

jbock用于命令行处理的方法与先前介绍的两个解析库所使用的方法不同。 前面介绍的库需要Java代码来解析命令行参数,以针对该库的JAR构建和执行这些参数。 换句话说,库的JAR必须同时在编译时( javac )类路径和运行时Java启动器( java )类路径中。 相反,jbock方法仅在编译时依赖于jbock JAR的包含。 jbock方法生成的Java源代码完全独立于jbock库。 例如,可以选择运行jbock一次生成这些Java源代码文件,然后对这些生成的文件进行版本控制,并且从那时开始仅对生成的文件进行构建和运行,而无需对jbock的JAR进行构建或运行。 仅当需要重新生成生成的Java源代码时,才需要jbock JAR。 由于生成的代码是基于自定义Java类上的注释生成的,因此jbock代码生成在大多数情况下可能会作为常规构建的一部分而不是版本控制生成的源代码来执行。

在大多数情况下,当使用jbock解析命令行参数时,我将使用一个自定义类,其名称为“ Arguments ”或“ CommandLine ”。 但是,对于本篇文章,我使用的是一个简单的Main类,其示例与本系列其他文章中的其他命令行解析库所使用的方法更相似。 像args4j一样,jbock在命令行处理的“定义”阶段使用注释。 但是,jbock的注释位于类的构造函数及其参数上,而不是args4j的注释类字段的方法。 下一个代码清单中演示了基于jbock构造函数的注释方法。

命令行选项的jbock“定义”

@CommandLineArguments
public Main(@ShortName('v') @LongName("verbose") @Description("Verbosity enabled?")final boolean newVerbose,@ShortName('f') @LongName("file") @Description("File name and path")final Optional<String> newFileName)
{verbose = newVerbose;file = newFileName.orElse("");
}
// . . .

下一个代码清单中演示了使用jbock进行命令行处理的“解析”阶段。

用jbock“解析”命令行选项

final Main_Parser parser = new Main_Parser();
final Main_Parser.Binder binder = parser.parse(arguments);
final Main main = binder.bind();

上面代码清单中显示的Main_Parser类是jbock根据第一个代码清单中显示的注释生成的。 jbock库处理Main类的注释,以确定如何构建Main_Parser类。 生成的类的名称基于带有jbock批注的类的名称,并与_Parser串联。 例如,如果将带有jbock注释的构造函数的类和构造函数参数命名为“ Arguments ”,则生成的类将命名为“ Arguments_Parser ”。

在命令行参数上调用了生成的Main_Parser类的实例的parse调用该实例的bind()方法以返回原始带注释的Main类的实例。 此时的“询问”过程仅包括通过其公共“获取”方法访问该Main实例的属性。 下一个代码清单对此进行了演示。

使用jbock进行命令行处理的“询问”阶段

out.println("The file '" + main.getFile() + "' was provided and verbosity is set to '"+ main.isVerbose() + "'.");

下面的屏幕快照演示了使用jbock解析命令行选项的代码。

如果需要帮助或用法信息,也可以从生成的*_Parser (在这种情况下为Main_Parser )类中检索该信息。 具体来说,生成的*_Parser类包括表示各个选项的嵌套Option枚举。 可以遍历那些选项的枚举值以检索有关每个选项的元数据。 在下面的代码清单中,对每个选项的枚举值(所传入的整数是要缩进的空格数describe(int)调用describe(int)方法。

使用jbock获取用法详细信息

final Main_Parser parser = new Main_Parser();
if (arguments.length < 1)
{for (final Main_Parser.Option option : Main_Parser.Option.values()){out.println(option.describe(3));}System.exit(-1);
}

接下来显示的屏幕快照演示了该代码的实际作用,以打印出选项及其说明。

这篇文章中讨论的源代码可以在GitHub上找到 。

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

  • jbock可作为开源软件使用 。
  • 当前版本的jbock(1.8)需要Java SE 8 。
  • jbock没有第三方或外部依赖项。
  • jbock 1.8 JAR( jbock-1.8.jar )的大小约为131 KB,但这并不像类似库那么重要,因为在运行时不需要此JAR(生成的代码独立于JAR)。
  • 我没有演示jbock强制执行必需的命令行参数,因为它故意不支持该功能。 自述文件指出:“特意简单:没有转换器,默认值或要求检查 。 使用Java 8,可以很容易地手动添加这些东西。”

jbock与其他大多数基于Java的命令行解析库不同的最明显特征是,完全在编译时生成了解析代码,这对jbock库没有任何运行时依赖性。 在担心装入的类数或表示的类路径的大小的情况下,这将是一个明显的优势。 自述文件列出了多个“将[jbock]分开”的项目。 其中包括“无反射,纯静态分析”和“通过构造函数的便捷,灵活的属性绑定”。

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

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

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

相关文章

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…

Java命令行界面(第12部分):CLAJR

第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 &#xff08;CLAJR&#xff09;。 该“库”是单个Java源文件&#xff08; CLAJR-0.9.java &#xff09;&#xff0c; 可从SourceForge下载 。 CLAJR的主页当前显示2006年版权日期&#xff…

specs.4.8.gz_使用Specs2和客户端API 2.0进行富有表现力的JAX-RS集成测试

specs.4.8.gz毫无疑问&#xff0c; JAX-RS是一项杰出的技术。 即将发布的规范JAX-RS 2.0带来了更多的强大功能&#xff0c;尤其是在客户端API方面。 今天的帖子的主题是JAX-RS服务的集成测试。 有很多优秀的测试框架&#xff0c;例如REST&#xff0c;可以确保提供帮助&#xff…