Java命令行界面(第7部分):JCommander

这是我系列的第七篇文章,简要介绍了用于处理Java命令行参数的各种库。 这篇文章回到了基于注释的库的覆盖范围,该库似乎是在Java中可用于处理命令行参数的众多可用库中知名度最高和最受欢迎的库之一: JCommander 。

JCommander的网页上指出:“因为生命太短,无法解析命令行参数”,并且概述将JCommander引入为“一个很小的Java框架,使得解析命令行参数变得微不足道。” 本文中的代码示例和执行代码的关联屏幕快照均基于JCommander 1.72 (2017年6月)。 此处显示的演示的完整代码可在GitHub上找到 。

JCommander使用批注来实现命令行处理的“定义”阶段。 下一个代码清单片段中对此进行了演示。

JCommander的“定义”阶段

/*** Demonstrates use of JCommander for Java-based command-line processing.*/
public class Main
{@Parameter(names={"-v","--verbose"},description="Enable verbose logging")private boolean verbose;@Parameter(names={"-f","--file"},description="Path and name of file to use",required=true)private String file;@Parameter(names={"-h", "--help"},description="Help/Usage",help=true)private boolean help;// . . .final JCommander commander= JCommander.newBuilder().programName("JCommander Demonstration").addObject(this).build();

刚刚显示的代码清单演示了如何使用JCommander的@Parameter批注通过类字段的批注来定义命令行选项。 这些示例演示了names说明,以指示与单个选项关联的多个选项标志;提供description以提供每个选项的说明; required=true以强制存在命令行参数, help=true以指示“帮助”。 ”或“使用”命令行参数(指示JCommander如果未提供必需的参数也不要抛出异常)。

通过用@Parameter注释注释的类属性,可以将带有注释字段的类的实例用于创建JCommander类的实例。 在上面的代码示例中,我利用了JCommander.Builder以获得与使用构建器相关的更大的流利性和其他优势。 特别是,带有注释的类字段的实例是通过addObject(Object)方法添加的。

通过对刚刚实例化的JCommander实例执行parse(String…)方法的单行调用,可以完成JCommander命令行处理的“解析”阶段。 下一个代码清单对此进行了演示。

使用JCommander进行“解析”阶段

commander.parse(arguments);

使用JCommander进行命令行处理的“询问”阶段涉及简单地访问传递给JCommander类实例化的实例的带注释的字段。 下一个代码清单对此进行了演示。

JCommander的“审讯”阶段

if (help)
{commander.usage();
}
else
{out.println("The file name provided is '" + file + "' and verbosity is set to " + verbose);
}

最后一个代码清单演示了确定--help-h规范是否设置名称为helpboolean属性的能力。 由于它是一个简单的boolean ,因此可以在条件条件中使用,如果为true ,则可以显示帮助/使用信息。 在未设置“ help”标志的情况下,将访问与其他命令行选项关联的值(“ verbose” / -v / --verbose和“ file” / -f / --file )。

最新的代码清单还演示了如何通过在JCommander类的实例上调用方法JCommander ()将用法信息写入标准输出。 值得注意的是ParameterException也有一个usage()方法 。

下一系列屏幕快照演示了如何将JCommander与包含上述代码段的简单应用程序一起使用。 第一个图像显示了不带任何参数运行基于JCommander的应用程序,并显示了在这种情况下显示的ParameterException ,因为未指定必需的--file / -f选项。

当提供了预期的命令行参数时,下一个屏幕快照将演示“正常”执行。

下一个屏幕快照演示了“帮助”选项的使用。 由于使用help=true进行了注释,因此缺少必需的“文件”命令行参数不会导致异常,并且自动生成的帮助/使用信息将写入标准输出。

JCommander提供了我非常喜欢的用于开发和学习JCommander的功能。 可以通过在JCommandBuilder上调用verbose(int)方法来指定JCommander解析的详细 程度 。

增加JCommander的详细程度

final JCommander commander= JCommander.newBuilder().programName("JCommander Demonstration").addObject(this).verbose(1).build();

随着冗长程度的提高,可以发现对JCommander正在执行的与命令行处理有关的更多信息,并在以下两个屏幕快照中得以证明。

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

  • JCommander是开源的,并获得了Apache License 2.0的许可 。
  • jcommander-1.72.jar大小约为68 KB,没有第三方库编译依赖项。
  • JCommander文档提供了将JCommander与Kotlin一起使用以及将JCommander与Groovy 一起使用的示例 。
  • JCommander仍然受到TestNG创作者Cedric Beust的积极支持, 其网页反映了其现代/当前的支持。

其他参考

  • 指挥官
  • Maven存储库上的JCommander
  • GitHub上的JCommander源
  • JCommander API (Javadoc)
  • 使用JCommander的复杂行命令语法
  • JCommander –轻松解析命令行参数
  • 使用JCommander轻松进行命令行界面编码
  • Args4j vs JCommander用于解析命令行参数
  • 使用JCommander和Spring的Java命令行标志
  • JCommander与args4j

翻译自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-7-jcommander.html

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

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

相关文章

Pytorch 加载部分预训练模型并冻结某些层

目录 1 pytorch的版本&#xff1a; 2 数据下载地址&#xff1a; 3 原始版本代码下载&#xff1a; 4 直接上代码&#xff1a; 1 pytorch的版本&#xff1a; 2 数据下载地址&#xff1a; <https://download.pytorch.org/tutorial/hymenoptera_data.zip> 3 原始…

INT类型知多少

前言&#xff1a; 整型是MySQL中最常用的字段类型之一&#xff0c;通常用于存储整数&#xff0c;其中int是整型中最常用的&#xff0c;对于int类型你是否真正了解呢&#xff1f;本文会带你熟悉int类型相关知识&#xff0c;也会介绍其他整型字段的使用。 1.整型分类及存储范围 整…

altera fpga 型号说明_A/X家FPGA架构及资源评估

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群评估对比xilinx以及altera两家FPGA芯片逻辑资源。首先要说明&#xff0c;现今FPGA除了常规逻辑资源&#xff0c;还具有很多其他片内资源比如块RAM、DSP单元、高速串行收发器、PLL、AD…

guava api_使用Google Guava的订购API

guava api我们在Google的Guava库中玩的更多&#xff0c;这真是一个了不起的库&#xff01; 我们用于它的最新内容是为我们的域对象整理比较器。 这是如何做。 使用Apache Isis的JDO Objectstore &#xff0c;使您的类实现java.lang.Comparable &#xff0c;并对集合使用SortedS…

Pytorch 加载和保存模型

目录 保存和加载模型 1. 什么是状态字典&#xff1a;state_dict? 2.保存和加载推理模型 2.1 保存/加载 state_dict &#xff08;推荐使用&#xff09; 2.2 保存/加载完整模型 3. 保存和加载 Checkpoint 用于推理/继续训练 4. 在一个文件中保存多个模型 5. 使用在不同…

02-CSS基础与进阶-day9_2018-09-12-20-29-40

定位 静态定位 position: static 相对定位 position: relative 绝对定位 position: absolute 脱标 参考点 子绝父相 让绝对定位的盒子水平居中和垂直居中 固定定位 position: fixed 参考点 浏览器左上角 固定定位的元素脱标不占有位置 兼容性 ie6低版本不支持固定定位 02绝对…

activity直接销毁_Android -- Activity的销毁和重建

两种销毁第一种是正常的销毁&#xff0c;比如用户按下Back按钮或者是activity自己调用了finish()方法&#xff1b;另一种是由于activity处于stopped状态&#xff0c;并且它长期未被使用&#xff0c;或者前台的activity需要更多的资源&#xff0c;这些情况下系统就会关闭后台的进…

Storm和Kafka集成的重要生产错误和修复

我将在此处描述Storm和Kafka集成模块的一些细节&#xff0c;一些您应该意识到的重要错误以及如何克服其中的一些错误&#xff08;尤其是对于生产安装&#xff09;。 我在生产安装中大量使用Apache Storm&#xff0c;并将Kafka作为主要输入源&#xff08;Spout&#xff09;。 …

博客园背景设置CSS代码

/配色参考->>->>>//https://zh.spycolor.com/color-index,a*/ #home { margin: 0 auto; width: 90%;/原始65/ min-width: 980px;/页面顶部的宽度/ background-color:rgba(233,214,107,0.3);/博客主页主体框的颜色/ padding: 30px; margin-top: 25px; margin-bot…

matplotlib 画多条折线图且x轴下标非数值

直接上python代码&#xff1a; # -*- coding: utf-8 -*- import matplotlib.pyplot as plt names [GFK, SA, DA-NBNN, DLID, DaNN, Ours] x range(len(names))y_1 [0.464, 0.45, 0.528, 0.519, 0.536, 0.841] y_2 [0.613, 0.648, 0.766, 0.782, 0.712, 0.954] y_3 [0.663…

julia常用矩阵函数_Julia系列教程3 数学运算 矩阵运算

数学运算https://www.zhihu.com/video/1113554595376295936数学运算比Matlab更直观的数学表达方式x 102x>>20但这就导致了可能会出现语法的冲突十六进制整数文本表达式 0xff 可以被解析为数值文本 0 乘以变量 xff浮点数文本表达式 1e10 可以被解析为数值文本 1 乘以变量…

Mysql 模糊查询 转义字符

MySQL的转义字符“\”\0 一个ASCII 0 (NUL)字符。 \n 一个新行符。 \t 一个定位符。 \r 一个回车符。 \b 一个退格符。 \ 一个单引号(“”)符。 \ " 一个双引号(“ "”)符。 \\ 一个反斜线(“\”)符。 \% 一个…

Pytorch LSTM初识(详解LSTM+torch.nn.LSTM()实现)1

pytorch LSTM1初识 目录 pytorch LSTM1初识 ​​​​​​​​​​​​​​​​​​​​​ 一、LSTM简介1

Java命令行界面(第8部分):Argparse4j

Argparse4j是“ Java命令行参数解析器库”&#xff0c;其主页描述为“基于Python的argparse模块的Java命令行参数解析器库”。 在本文中&#xff0c;我将简要介绍如何使用Argparse4j 0.7.0处理命令行参数&#xff0c;该参数与本系列中的前七篇有关Java命令行处理的文章中所解析…

MvvmLight框架使用入门(三)

MvvmLight框架使用入门&#xff08;三&#xff09; 本篇是MvvmLight框架使用入门的第三篇。从本篇开始&#xff0c;所有代码将通过Windows 10的Universal App来演示。我们将创建一个Universal App并应用MvvmLight框架。 首先通过VS2015创建一个名为UniversalApp的空工程&#x…

Pytorch LSTM实例2

对Pytorch中LSTM实例稍作修改,这是一个词性标注的实例 #导入相应的包 import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optimtorch.manual_seed(1)#准备数据的阶段 def prepare_sequence(seq, to_ix):idxs = [to_ix[w] for w in …

java更好的语言_Java,如果这是一个更好的世界

java更好的语言只是梦想着有一个更好的世界&#xff0c;在该世界中&#xff0c;Java平台中的一些旧错误已得到纠正&#xff0c;而某些令人敬畏的缺失功能也已实现。 不要误会我的意思。 我认为Java很棒。 但是它仍然存在一些问题&#xff0c;就像其他平台一样。 我没有任何特定…

anaconda安装成功测试_学习笔记120—Win10 成功安装Anaconda 【亲测有效,需注意几点!!!】...

Win10 下安装 Anaconda一、下载安装 Anaconda(勾选 PATH)&#xff1a;Anaconda 是专注于数据分析的 Python 发行版本&#xff0c;包含了 conda、Python 等 190 多个科学包及其依赖项。使用 Anaconda 的好处在于可以省去很多配置环境的步 骤&#xff0c;省时省心又便于分析。下载…

Pytorch 词嵌入word_embedding1初识

torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, sparse=False)参数所表示的含义: num_embeddings (int) :嵌入字典的大小 embedding_dim (int) :每个嵌入向量的大小 padding_idx (int, optio…

Python语言 目录

待续.... 转载于:https://www.cnblogs.com/jiangchunsheng/p/11077884.html