java登录界面命令_Java命令行界面(第12部分):CLAJR

java登录界面命令

第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 (CLAJR)。 该“库”是单个Java源文件( CLAJR-0.9.java ), 可从SourceForge下载 。 CLAJR的主页当前显示2006年版权日期,可下载的zip文件源CLAJR-0.9-src.zip的日期为2008年12月6日。尽管近年来CLAJR似乎在很大程度上不受支持,尽管我不太可能选择CLAJR在本系列中已经讨论过的一些用于处理Java代码的命令行参数的替代库中,我相信CLAJR值得一提。 即使有些人选择不使用它,CLAJR也有一些相当独特的特性使它变得有趣。

CLAJR未作为JAR提供。 而是以单个压缩文件的形式提供,该ZIP文件中包含单个Java源代码文件。 作为单个源代码文件提供不是CLAJR独有的。 Picocli也以单个Java源代码文件提供。 但是,Picocli还在Maven存储库(我在使用Picocli时使用的存储库)上提供了JAR,但我不知道带有适用于CLAJR的.class文件的预构建JAR。 因此,由于使用第三方库时,我比源代码文件更喜欢JAR,因此我在尝试CLAJR时所做的第一件事是将其提供的源代码构建为一个小的JAR文件。

这是我使用CLAJR构建JAR的步骤(我必须对源文件进行一些更改,该更改将在本文后面描述):

  1. 从SourceForge 下载 CLAJR-0.9-src.zip
  2. 解压缩CLAJR-0.9-src.zip以解压缩CLAJR-0.9.java
  3. 创建目录clajr来表示Java源类应存在于其中的Java clajr包。
  4. CLAJR-0.9.java文件移动到clajr目录,并将其重命名为CLAJR.java以匹配该源文件中的类的名称。
    • 我还必须编辑源代码以进行较小的更改。 这将在后面的文章中详细讨论。
  5. 使用javacCLAJR.java文件编译为多个类文件。
  6. 使用jar将已编译的.class文件组装成一个JAR(我将其命名为CLAJR-0.9.jar )。

以下两个屏幕快照说明了上述步骤。

本系列到目前为止所介绍的基于Java的命令行解析库倾向于使用批注或特定的编程API,以允许在Java代码中定义,解析和询问命令行参数。 顾名思义,CLAJR使用Java反射来定义要解析的预期参数。

CLAJR主页上描述了为什么作者选择对方法名称进行反思以定义命令行参数。 CLAJR寻找被命名为与要处理的一个或多个参数相对应的方法。 单下划线在单连字符命令行参数的方法名称之前,而双下划线在双连字符命令行参数的方法名称之前。 当多个命令行参数执行相同的操作时,可以将单个方法命名为与多个命令行参数对齐。

与本系列的其他文章一样,我在本文中的示例演示了如何使用CLAJR库对--file / -f命令行参数和--verbose / -v命令行参数进行建模。 要在CLAJR中“定义”这些参数,我需要将方法_f__file_v__verbose为对应于-f / --file-v / --verbose参数。 下一个代码清单中的嵌套类Options的部分代码片段对此进行了演示。

CLAJR中的“定义”阶段:反思

/*** Used reflectively by CLAJR to parse and interrogate command line* options defined as fields in this class.*/
public static class Options
{private String file;private boolean verbose;public void _v__verbose(){verbose = true;}public void _f__file(String newFilePathAndName){file = newFilePathAndName;}

使用CLAJR进行解析仅需一个语句。 接下来的两行代码演示了如何调用静态CLAJR.parse(String[], Object...)并将上面部分显示的命令行参数和Options类的实例化实例传递给它。

CLAJR中的“解析”阶段

final Options options = new Options();
CLAJR.parse(arguments, options);

在上面显示的单行分析中, parse方法没有返回值。 相反,传入的“选项”实例的字段根据在命令行上提供的参数填充。 CLAJR在“选项”实例的方法上使用反射,以找到在命令行上发现相应参数时要调用的方法。 正是Options这种实例,人们可以“询问”以在命令行上找到参数的值。 下一个代码清单中对此进行了演示。

CLAJR的“审讯”阶段

out.println("File is '" + options.getFile() + "' and verbosity is set to '"+ options.isVerbose() + "'.");

CLAJR支持通过反思按方法提供帮助/使用信息。 在这种情况下,方法的命名方式与命令行参数本身的约定类似,但是方法名称之前带有help 。 下一个代码清单中前面显示的参数的两种组合对此进行了演示。

CLAJR“帮助”方法

public String help_v__verbose()
{return "Enables verbosity of output.";
}public String help_f__file()
{return "Path and name of file.";
}

刚刚显示的代码清单中的方法为-v / --verbose-f / --file参数提供“帮助”字符串。 静态CLAJR方法CLAJR.getHelp()方法提供一个String表示基于这些方法的命令行用法。 CLAJR提供了可以捕获的不同异常,这些异常通常与“帮助”方法结合使用。 在下一个代码清单中演示了这些内容,该清单显示了可以执行的与不同错误情况相关的多个捕获,以及其他保证显示错误信息的情况。

CLAJR的CLAJR.getHelp()和CLAJR异常

catch (CLAJR.EmptyArgumentListException emptyArgsEx)
{out.println("Usage: Main -f|--file  [-v|--verbose]");
}
catch (CLAJR.HelpNeededException helpNeededEx)
{out.println(CLAJR.getHelp());
}
catch (CLAJR.ParseException parseEx)
{out.println(parseEx.getMessage());out.println(CLAJR.getHelp());
}
catch (Throwable throwable)  // CLAJR.parse throws Throwable
{out.println(throwable.getMessage());
}

CLAJR 0.9的CLAJR.parse(String[], Object...)方法抛出Throwable ,因此上面的代码捕获了Throwable

接下来的三个屏幕快照展示了这个简单的示例。 第一张图片显示了没有提供参数时打印的用法。 第二张图描绘了定义,解析和询问命令行参数的正常流程。 第三个图像演示了在命令行上提供意外的参数时显示的帮助信息。

为了使示例CLAJR.java ,我必须更改CLAJR.java源文件。 具体来说,我将invoke(String, String, boolean, List)方法中的491行if (tails == null)更改为if (tails == null || tails.isEmpty()) 。 这是开源的优势之一; 可以根据需要调整或修复代码。

CLAJR允许以反射方式访问以单个下划线命名的方法。 此-方法对应于一个或多个“ tail”参数。 在本示例中,我没有使用它,但是有趣的是,这在JDK 9中不起作用,因为在JDK 9中不允许使用单个下划线作为标识符。实际上,JDK 8的javac现在对此进行警告,如图所示。下一个屏幕快照。

在选择框架或库来帮助Java进行命令行分析时,需要考虑CLAJR的一些其他特征。

  • CLAJR是开源的,并获得了GNU通用通用公共许可证 ( 2.1或更高版本)的许可 。
  • CLAJR是供下载作为包含单个文件CLAJR-0.9.java称为CLAJR-0.9-src.zip大约11 KB的zip文件。
  • CLAJR 0.9不需要下载任何第三方库。
  • CLAJR已经存在了一段时间,但似乎已经有好几年没有更新了。 我必须对源代码进行一些小的更改,以使其对我来说正常工作。

CLAJR是基于Java的命令行处理库,其主要用途是通过使用反射与本系列中介绍的其他库区分开。 反射用于定义预期的命令行参数以及与这些参数关联的帮助消息。 CLAJR提供了一些与Java命令行处理相关的独特思想和方法,但这是一个过时的库。

其他资源

  • CLAJR主页
  • CLAJR在SourceForge上下载

翻译自: https://www.javacodegeeks.com/2017/08/java-command-line-interfaces-part-12-clajr.html

java登录界面命令

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

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

相关文章

java导出excel搜索下拉框,POI写入Excel下拉框[Select选项]

记录部分方法, 操作POIPOI version3.10-FINALorg.apache.poipoi${poi.version}org.apache.poipoi-ooxml${poi.version}1.首先根据路径读取Excel模板/*** 读取服务器上面的上传的excel文件** param path* return*/public static Workbook readWorkBook(String path) {Workbook w…

openssh rpm包_100台CentOS7要升级OpenSSH怎么办?

背景现在有 100 台 Centos7 需要升级 OpenSSH 到 8.3,怎么办呢?一台台的操作显然不符合我摸鱼的风格,既然每台操作都一样,Ansible Roles 就有用武之地了。正常升级流程首先 rpmbuild 打出 OpenSSH 8.3 的 RPM 包,rpm -…

java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息。其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Spring IoC 容器初始化」和「Spring IoC 容器初始化(2)」分析了 Spring 如何初始化…

thymeleaf与jsp_PagingAndSortingRepository –如何与Thymeleaf一起使用

thymeleaf与jsp在本教程中,我将演示如何通过分页显示Thymeleaf中的企业客户列表。 1 –项目结构 我们有一个正常的Maven项目结构。 2 –项目依赖性 除了正常的Spring依赖关系之外,我们还添加Thymeleaf和hsqldb,因为我们使用的是嵌入式数据…

MySQL 数据库中如何将表字段的空值全部替换成空字符串

UPDATE permissions SET name ( CASE WHEN IFNULL(name, ) THEN ELSE name END ) WHERE name IS NULL;

python requests是什么_如何基于Python + requests实现发送HTTP请求

这篇文章主要介绍了如何基于Python requests实现发送HTTP请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、在接口自动化测试过程中,存在两种情况: 一种是不需要鉴权的接口&#…

MySQL 批量生成 SQL 脚本语句解决实际的业务需求/如何拼接字符串/拼接字符串的 SQL 语句

文章目录实际需求分析思路写拼接 SQL 脚本的脚本语句执行得到脚本语句保存成 SQL 脚本文件实际需求 有些行政区域的字段 area_fullname 是空的,如何补全呢?如下所示: 分析思路 (一)如何取到每个区域的上级名称和上…

php的变量都放在哪里,php变量一般放在哪个位置

php变量一般放在哪个位置php定义变量的要求格式,是非常宽松的,至于在哪里定义变量就需要看你的需求,可以在构造函数,也可以在你定义的方法中定义局部变量,也可以在构造函数外面定义全局变量。// 局部变量 函数内部func…

oauth2令牌刷新_了解OAuth2令牌认证

oauth2令牌刷新1.简介 在本教程中,我们将了解OAuth2令牌身份验证 ,以便只有经过身份验证的用户和应用程序才能获得有效的访问令牌,该令牌随后可用于访问服务器上的授权API(在OAuth术语中仅是受保护的资源)。 使用基于…

整型数组 判断 java,给定一个整数数组,判断其中是否有3个数和为N

借助集合将复杂度降到n2,但耗时还是比较长。 import java.util.HashMap;import java.util.HashSet;import java.util.Scanner;/*** Author: coderjjp* Date: 2020-05-07 8:40* Description:给定一个整数数组,判断其中是否有3个数和为N* version: 1.0*/public class …

jsap支付_Java命令行界面(第20部分):JSAP

jsap支付JSAP ( Java Simple Argument Parser )2.1是本系列文章的第二十篇,重点是处理Java的命令行参数。 JSAP页面描述了该库存在的原因:“我在Internet上找到了多个解析器,所有解析器都处理了开关,但是没…

QPW 行政区划字典表(td_area)

行政区划字典表 CREATE TABLE td_area (area_code varchar(10) NOT NULL COMMENT 区域编码,area_name varchar(50) DEFAULT NULL COMMENT 区域名称,area_fullName varchar(300) DEFAULT NULL COMMENT 区域全称,is_hot tinyint(2) DEFAULT 0 COMMENT 是否热门, # 0-否&#xff…

python语句大全input_input提示文字 Python基础输入函数,if-else语句,if-elif

input()函数 此功能用于获取用户输入。 (调用1)input后,程序将立即暂停并等待用户输入。在用户完成内容输入后,单击Enter,程序将继续向下执行。 例如: input() (2&#x…

Linux 命令之 lsusb -- 显示本机的USB设备列表信息

文章目录命令介绍常用选项命令示例(一)显示 USB 设备详细信息命令介绍 lsusb命令用于显示本机的USB设备列表,以及USB设备的详细信息。 lsusb命令显示的USB设备信息来自“/proc/bus/usb”目录下的对应文件。 语法格式:lsusb [选项…

ftp限流java,FTP流量限制的方法

一般来说,下载都是通过FTP来实现的,这样简单的采用ACLs就可以实现的。不过这样存在一个问题,就是原来正常的网络访问也给禁止了,无法继续工作,另外,还有大量的DOWNLOAD不通过FTP,而是借助HTTP协…

argparser_Java命令行界面(第22部分):argparser

argparserJohn Lloyd的argparser是本系列的第二十二篇有关基于Java的命令行参数解析的文章中介绍的库。 该库的主页除了提供单个源代码示例外,还提供了指向基于Javadoc的API文档 ,JAR文件,ZIP文件和TAR文件的链接。 本帖子中使用的示例与本系…

判断 小程序 是否 滚动到页面底部 scrolltolower_微信小程序长列表性能优化——recycle-view

背景:第七次人口普查项目使用是微信小程序原生框架,组件是根据用户需求由项目组前端组组长封装完成的。采集小程序正式登记首页列表页面,根据腾讯老哥在sentry上的监控可以看出,列表页面前端性能比较差,主要表现在一些…

Linux 命令之 lspci -- 显示当前设备所有PCI总线信息

文章目录命令介绍常用选项命令示例(一)罗列 PCI 设备命令介绍 lspci命令用于显示当前主机的所有PCI总线信息,以及所有已连接的PCI设备信息。 现在主流设备如网卡储存等都采用PCI总线 常用选项 选项说明-n以数字方式显示PCI厂商和设备代码-…

arm java 性能怎么样,ARM v6上使用java的Number to String转换性能

我在ARM v6处理器上运行Java软件.这个程序的性质要求我将一些数字(int或float)转换为String.处理器运行速度为850Mhz. Java Runtime是OpenJDK Zero VM 1.7.0_21-b02.我并不期待这里有坚如磐石的表演,但我希望能比我在下面的代码片段中看到的更有效.long time1, time2;float[] s…

java rop_Java命令行界面(第23部分):Rop

java ropRop库在其主页上被描述为“用Java编写的轻量级命令行选项解析器”。 Rop的“简介”还指出:“ Rop的设计目的是最小化同时方便,并涵盖了大多数常见的命令行解析用例。” 这篇文章是本系列中有关解析Java命令行参数的系列文章中的第23部分&#xf…