java登录界面命令_Java命令行界面(第10部分):picocli

java登录界面命令

picocli主页面将picocli描述为“强大的微小命令行界面”,“ picocli”是一个单文件Java框架,用于解析命令行参数并生成精美,易于定制的用法帮助消息。 有颜色。” 这篇文章简要概述了如何使用Picocli 0.9.7处理Java代码中的命令行参数。

像本系列中介绍的其他基于Java的命令行处理库一样, picolci是开源的 。 由于picocli的所有实现都存在于单个Java源代码文件中 ,因此如果需要,可以直接直接使用源代码。 picocli页面强调了这一点,“ picocli的一个显着特征是它旨在让用户运行基于picocli的应用程序而无需将picocli作为外部依赖项:所有源代码都保存在一个文件中,以鼓励应用程序作者将其包含在其中。源表格 。” 如果您想将picocli用作库,则Maven信息库中提供了一个JAR,其中包含许多已编译的.class文件(Picocli具有一个Java文件,但具有许多嵌套的类和注释)。

了解Picocli单文件性质的最简单方法是查看该单文件本身。 Picocli的“下载”页面上提供了CommandLine.java的Java源代码。 接下来的两个屏幕快照显示了当对CommandLine类执行时,对一个内部注释和一个内部类执行时, javap的一些输出。

无论是将CommandLine.java编译成自己的类/ JAR文件,还是选择使用Maven中的预构建JAR,使用Picocli的应用程序的源代码显然都是相同的。 使用Picocli进行解析的“定义”阶段是通过注释实例字段来完成的,这些实例字段将存储与命令行选项关联的值。 下面的代码段对此进行了演示。

Picocli的“定义”阶段

/*** Demonstrate Java-based command-line processing with picocli.*/
@Command(name="Main",description="Demonstrating picocli",headerHeading="Demonstration Usage:%n%n")
public class Main
{@Option(names={"-v", "--verbose"}, description="Verbose output?")private boolean verbose;@Option(names={"-f", "--file"}, description="Path and name of file", required=true)private String fileName;@Option(names={"-h", "--help"}, description="Display help/usage.", help=true)boolean help;

刚刚显示的代码示例演示了Picocli允许指定选项标志的多个名称(在我的示例中,我指定了单连字符单字符名称和双连字符多字符名称)。 该例子也说明required=true能为所需的选项,指定help=true支持特别可以“帮助”选项来指定具体的帮助,行为,比如打印使用细节,避免与缺乏所需的选项错误。 请注意,Picocli 0.9.8通过versionHelpusageHelp添加了更多特定的帮助类型支持。

“解析”阶段是在Picocli中使用CommandLine.populateCommand(T,String ...)完成的 ,其中T是带有Picocli注释字段的类的实例,其余String是要解析的参数。 下一个代码片段对此进行了演示。

Picocli的“解析”阶段

final Main main = CommandLine.populateCommand(new Main(), arguments);

使用Picocli进行“询问”阶段仅需访问在“解析”阶段中传递给CommandLine.populateCommand(T,String...)方法的实例的Picocli注释字段。 下一个代码清单中描述了这种“询问”的简单示例。

Picocli的“审讯”阶段

out.println("The provided file path and name is " + main.fileName+ " and verbosity is set to " + main.verbose);

要在命令行上提供-h--help时向用户显示帮助/使用信息,就像“询问”指定为help=true的Picocli注释字段一样简单,以查看是否设置了该布尔值并且,如果已设置,则调用重载的CommandLine.usage方法之一。 我碰巧使用了此方法的static版本之一,如下面的代码清单所示。

Picocli的帮助/使用

if (main.help)
{CommandLine.usage(main, out, CommandLine.Help.Ansi.AUTO);
}

接下来的几个屏幕快照演示了实际的基于Picocli的简单处理应用程序。 第一张图片显示了错误消息的类型和堆栈跟踪,当不存在必需的标志时显示。 第二张图片显示了如何在注释中指定我使用的长名和短名。 第三张图片显示了正在使用的帮助功能。

许多其他基于Java的命令行解析库所不具备的Picocli可选功能之一是颜色语法支持 。 这篇文章的第一个代码清单显示了一些用@| |@注释定义的字符串@| |@ @| |@语法。 在上面显示“帮助”用法的屏幕快照中,这些字符按原样传递,没有特殊处理。 但是,如果我改为在Cygwin中运行此示例代码,则会看到这些标记完成的工作。

从上面的屏幕快照中,我们看到Picocli自动将某些颜色语法(黄色和白色)应用于各个选项的帮助,并且还将自定义的粗体和带下划线的粗体语法应用于描述@| |@区域@| |@ @| |@语法已应用。

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

  • Picocli是开源的,并根据Apache License 2.0获得许可 。
  • Picocli不需要下载任何第三方库或框架。
    • Picocli源代码完全包含在一个.java文件中,并且该源代码可以复制并粘贴到自己的配置管理系统中,并与其余应用程序代码一起构建,这意味着甚至Picocli JAR文件也并非绝对必要。
  • CommandLine.java源代码文件(Picocli 0.9.7)不到3700行(包括空白和注释),大小几乎为200 KB。 picocli-0.9.7.jar文件的大小约为83 KB。
  • Picocli得到当前和经常的支持。 它的0.9.8版本是昨天发布的(在我撰写了这篇文章的大部分内容之后)。
  • 与其他几个基于Java的命令行处理库的文档相比, Picocli文档更为详细,并且在许多方面都更具现代感。
  • Picocli对颜色语法的支持易于使用,并且在不同平台上对颜色语法的支持已在文档的“ 支持的平台 ”部分中进行了说明。
  • Picocli在实例级字段上使用批注的方式与某些其他基于Java的命令行处理库类似,并且具有相同的优势。
  • Picocli的基本功能非常易于访问且易于快速学习,但是Picocli还支持使用Picocli显着自定义命令行处理的多个方面的功能。

Picocli是当前支持和更新的库,用于处理Java的命令行参数。 它具有其他一些可用的基于Java的命令行处理库的一些较新的功能和方法,并引入了几个不同的功能(颜色语法和整个库封装在单个Java源文件中)。 Picocli易于使用并具有吸引力,但是如果特定的开发人员希望获得颜色语法支持或将源代码文件拖放到开发人员项目中的能力,则该开发人员很可能会将自己与其他开发人员分开需要一个JAR或已编译的.class文件。

其他参考

  • Picocli主页
  • Picocli发布
  • Picocli的单个源文件: CommandLine.java
  • Maven上的Picocli
  • GitHub上的Picocli
  • Picocli API文档 (Javadoc)

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

java登录界面命令

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

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

相关文章

navicat运行sql文件慢_SQL进阶之路——入门

一、初步了解SQL数据库:用来存放数据关系数据库:1.含有多张表 2.各表之间有关系关系数据库中表的样式:a.每个表1个表名 b.每个表中包含记录列名的列和记录数据的行 c.利用主键用来标识数据的唯一性关系数据库中每个表之间如何建立联系&#x…

查询英文缩写形式(缩写词)的网站工具梳理

国外 https://www.abbreviations.com/ 点评:比较靠谱,大部分单词查询到的缩写形式是正确的 https://www.acronymfinder.com/ 点评:不是很靠谱,很多单词查询到的缩写形式是错误的 国内 http://shortof.com/ 点评&#xff1a…

java登录界面命令_Java命令行界面(第19部分):jClap

java登录界面命令本系列中第19个帖子的重点是从Java代码解析命令行参数是jClap ( Java命令行参数解析器 ),不应与JCLAP库混淆,该库是我本系列前 一篇文章的重点。 上 一篇 文章介绍了Giles Winstanley( snaq.net &…

weka分类器怎么设置样本类别_【程序喵笔记】小样本学习1.0

小样本学习前几天接触小样本学习 Few-Shot Learning,感觉很是有意思。看到Shusen Wang老师的讲解,感觉很棒~持续学习~学会学习 Lean to learn小朋友去动物园,见到未知的动物,他虽然不知道类别,但是给他看一些卡片&…

关于编号/编码命名的问题

文章目录概述订单号命名概述 银行卡账号、员工编号、分店编号、单据编号、单据流水号、部门编号,基本都是用 Number 命名,缩写 NO。 分析:在实际的业务中,很多以 Number 命名的编号里面通常只有阿拉伯数字,没有其它字…

c# java 哪个好 流媒体_C#Net7mma H264 / PCMU流媒体

我在创建一个包含音频和视频音频和视频的流时遇到问题 . 我正在为rtsp服务器使用net7mma库 . 我正在播放视频给wowza . 我得到了H264 / AVC视频流和PCMU 44,1k采样率视频流 . 这就是我这样做的方式:首先我创建媒体:RFC6184Media newMedia new RFC6184Me…

maven 生成本地库_在2017年从Maven工件生成P2存储库

maven 生成本地库几年前,我写了一篇博客文章,介绍如何基于Maven工件生成P2存储库。 如今,这种描述的方法已经过时了,我想展示一种基于p2-maven-plugin的新方法,该方法是为解决此问题而创建的。 Maven构建生命周期中的…

java 状态模式 同步_JAVA设计模式之状态模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改…

python列表修改_python修改列表

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 由于惯性思维,导致使用for循环修改列表中的值出现问题首次尝试:def make_great(orig…

QPW 企业员工表(tf_company_employee)

文章目录员工表字段说明员工表 CREATE TABLE tf_company_employee (employee_id bigint(20) NOT NULL COMMENT 职员Id,employee_no varchar(15) NOT NULL COMMENT 职员编号, # (补)管理员自定义,可以为空,但是非空时不许重复&…

python装饰器作用和功能_Python装饰器原理与用法分析

这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下 本文实例讲述了Python装饰器原理与用法。分享给大家供大家参考,具体如下: 1、装饰器的本质是函数&#xff0c…

java登录界面命令_Java命令行界面(第16部分):JArgp

java登录界面命令这篇文章中介绍的基于Java的命令行参数处理库是IBM developerWorks文章Java编程动态性,第3部分,应用的反射 (第2003 部分,此归档文章于2016年“归档”,但仍可通过PDF下载 )的特色库。 。 该…

QPW 用户签到日志表(tf_user_signin_log)

用户签到日志表 CREATE TABLE tf_user_signin_log (signin_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 签到ID,user_id bigint(20) DEFAULT NULL COMMENT 用户ID,insert_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,update_time timestamp NOT …

tnsnames.ora配置未生效_1分钟了解网络交换机的6种命令配置模式

我们在配置交换机的时候首先要了解的就是交换机命令模式,小编用Cisco思科交换机为例带大家了解交换机的6种配置模式。Cisco IOS提供了用户EXEC模式和特权EXEC模式两种基本的命令执行级别,同时还提供了全局配置、接口配置、Line配置和vlan数据库配置等多种…

dockerfile mysql例子_docker-compose 实用示例

简单来说, docker compose就是一键启动/关闭多个容器的工具, 它能够帮你解决容器之间依赖的问题, 哪个先启动, 依赖哪个容器等.当开发的系统越来越复杂, 开发环境和部署都没那么简单的时候, 可以试试docker compose.下面会把我实际经验中的一个例子简化出来,一步步教…

QPW 操作日志表(tl_operate_log)

操作日志表 前端每次调后端服务时,会往这张表插入一条记录,作为接口调用日志,出现 bug 时可以查询这张表追溯问题。 CREATE TABLE tl_operate_log (operate_log_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 操作ID,user_id bigint(20) …

java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

java 线程中创建线程在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet。 java.util.concurrent包甚至没有一个名为ConcurrentHashSet的类,但是从JDK 8开始,您可以使用新添加的keySet(默认值)和ne…

docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

紧接着上篇《关于 Docker 镜像的操作,看完这篇就够啦 !(上)》,奉上下篇 !!!镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌握的。本文将带您一步一…

排序出错Java_使用picard排序去重出错

命令:java -jar/public/home/nieyg/biosoft/package/picard-tools-1.124/picard.jar SortSam \I/public/home/nieyg/atacseq/data/Rawdata/align/LDN-D2-1.raw.bam\OLDN-D2-1.sort.bam \SORT_ORDERcoordinate错误信息:Exception in thread "main&qu…

移动端设备标识码/设备唯一标识码/设备唯一性

文章目录名词释义Android 设备标识码iOS设备标识码总结名词释义 Device ID:设备ID。 IMEI:International Mobile Equipment Identity,国际移动设备身份码的缩写。是由15位数字组成的“电子串号”,它与每台手机一一对应&#xff0…