Java命令行界面(第14部分):google-options

google-options的GitHub页面指出google-options是“来自Google(java)的人们的命令行参数解析库。” 该页面继续说:“这是Bazel Project中的命令行参数解析器。 com.google.devtools.common.options程序包已拆分为一个单独的jar,用于通用工具。” 这篇博客文章演示了如何将google-options应用于处理Java代码中的命令行选项。

这篇文章中用于演示google-options的示例与本系列前面的13篇文章中有关处理Java命令行选项的示例相似。 本示例支持两个选项:一个必需的文件路径/名称选项,该选项要求带有该路径和名称的String参数,以及一个不带参数的详细选项(它的存在启用详细性)。 这篇文章只会显示代码中最相关的部分,但是完整的代码可以在GitHub上找到 。

基于Java的命令行处理的“定义”阶段是通过自定义类在google-options中完成的,该类扩展了google-options的com.google.devtools.common.options.OptionsBase类。 自定义类应提供与预期的命令行选项相对应的public字段,并且每个public字段都应使用@Option注释进行注释 。 @Option批注需要两个元素( name和defaultValue ),并允许使用诸如help和abbrev的可选元素。 在自定义Options类的下一个代码清单中提供了此“定义”阶段的示例。

带有google-options的“定义”阶段:自定义

/*** Represents command-line options to be processed via* google-options library. Fields must be annotated with* @Option and must be public.*/
public class Options extends OptionsBase
{@Option(name="file",abbrev='f',help="Path and name of file",category="Startup",defaultValue="")public String filePathAndName;@Option(name="verbose",abbrev='v',help="Enable verbose output",category="Startup",defaultValue="false")public boolean verbose;
}

@Option批注的必需“ name”元素指定“ long”选项名称,而可选的“ abbrev”元素指定“ short”(单个字符)选项名称。 @Option注释的可选“ help”元素允许为选项提供“帮助”字符串,而必需的“ defaultValue”元素指定未明确指定选项时要使用的选项的默认值。

在Google-options中,“解析”阶段是通过实例化与使用Option注释的public字段与自定义类相关联的OptionsParser实例,然后在该OptionsParser实例上调用“ parse”方法来完成的。 下一个代码清单通过调用OptionsParser.parseAndExitUponError(String [])方法演示了这一点。

带有Google选项的“解析”阶段

final OptionsParser optionsParser = OptionsParser.newOptionsParser(Options.class);
optionsParser.parseAndExitUponError(arguments);

带有google-options的“审讯”阶段就像访问自定义类上带Option注释的public字段一样简单,如下面的代码清单所示。

谷歌选项的“审讯”阶段

out.println("Path/file name is '" + options.filePathAndName+ "' and verbosity is '" + options.verbose + "'.");

下一个代码清单演示了如何使用OptionsParser方法describeOptions显示帮助详细信息。

使用google-options的“帮助”

private static void printUsage(OptionsParser parser)
{out.println("Usage: java Main <Options>");out.println(parser.describeOptions(Collections.emptyMap(),OptionsParser.HelpVerbosity.LONG));
}

以下屏幕快照演示了以上代码清单。 第一个图像描述了没有提供参数时提供的“帮助”信息,第二个图像描述了以各种长短形式表示的两个主要命令行选项。 从第二张图片可以看出,有趣的是google-options自动为boolean选项支持--noversion选项,显式指定了没有冗长性。

屏幕快照还显示google-options对Guava有依赖性。

这是在选择框架或库以帮助使用Java进行命令行解析时要考虑的google选项的特征。

  • google-options是使用Apache License 2.0许可的开源库。
  • google-options-1.0.0.jar的大小约为72 KB。
  • 使用google-options的应用程序还需要在运行时类路径上包括Guava,因为google-options依赖于Guava。 无论如何,对于使用Guava的应用程序来说,这并不是什么大问题。 但是,对于尚未使用Guava的小型应用程序,这可能比应用程序作者希望为基于命令行的简单应用程序所具有的依赖性更大。

本系列中介绍的几个基于Java的命令行处理库都使用批注定义了期望的选项,这就是google-options使用的方法。 使用google-options进行命令行选项的基本处理是一个相对简单的过程,但是对于不依赖Guava的简单应用程序来说,新的Guava依赖项的成本可能太高了。

其他参考

  • google-options GitHub页面
  • google-options Javadoc API文档
  • Maven存储库上的google-options 1.0.0

翻译自: https://www.javacodegeeks.com/2017/09/java-command-line-interfaces-part-14-google-options.html

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

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

相关文章

android 输入法文本选择功能,Android的文本和输入---创建输入法(一)

输入法编辑器(IME)是让用户输入文本的控件。Android提供了一个可扩展的的输入法的框架&#xff0c;它允许应用程序给用户提供另外的输入法&#xff0c;如软键盘或语音输入。这些输入法一旦安装&#xff0c;用户就可以从系统的设置中选择他们想要使用的IME&#xff0c;并且这个设…

华为mate40RS能升级鸿蒙,mate40Pro和40RS能用上鸿蒙系统吗

[分享交流]mate40Pro和40RS能用上鸿蒙系统吗8886电梯直达huafen210861086新学乍练发表于 2020-12-18 12:30:08来自&#xff1a;HUAWEI Mate 40 Pro最新回复 2020-12-19 09:50:21如题好多人都说不能用上鸿蒙系统林泽徐独步江湖发表于 2020-12-18 12:30:52来自&#xff1a;HUAWEI…

android记事本添加图片功能,安卓手机上有什么便签app既可以写日记又可以添加照片?...

原标题&#xff1a;安卓手机上有什么便签app既可以写日记又可以添加照片&#xff1f;当前&#xff0c;有很多人一直保持着写日记的习惯&#xff0c;因为这样可以及时记录自己的成长轨迹&#xff0c;使得自己可以追寻到时光的记忆&#xff0c;但是我们记录日记的工具&#xff0c…

Java命令行界面(第20部分):JSAP

JSAP &#xff08; Java Simple Argument Parser &#xff09;2.1是本系列文章的第二十篇&#xff0c;重点是处理Java的命令行参数。 JSAP页面描述了该库存在的原因&#xff1a;“我在Internet上找到了几个解析器&#xff0c;所有解析器都处理了开关&#xff0c;但是在解析返回…

小米平板4android软件兼容吗,小米平板4有NFC功能吗 小米平板4支持NFC吗

小米平板4有NFC吗&#xff1f;小米平板4终于在诸多期待之下发布了&#xff0c;总的来说&#xff0c;小米平板4是一款性价比非常高的产品。所以没有带来太多惊喜的地方&#xff0c;但整体表现还是不错的。可以说是目前最便宜的骁龙660智能产品&#xff0c;性能中端。加上小米MIU…

监视器java_Java监视器绑定的超人

监视器java这是超人生活中的黑暗时期。 乔尔艾尔&#xff08;Jor-El&#xff09;希望他继续航行&#xff0c;为他的最终命运做好准备。 然而&#xff0c;地球面临着世界末日&#xff0c;正义联盟需要他们的钢铁侠行动来拯救世界。 但是&#xff0c;由于我们只有一个超人&#x…

Java命令行界面(第25部分):JCommando

JCommando 网站 上将JCommando描述为“命令行参数的Java参数解析器”。 JCommando读取XML配置以生成一个Java类&#xff0c;该类处理Java应用程序中的解析。 在提供XML配置的 Java命令行解析库的本系列文章中&#xff0c;以前涵盖的唯一基于Java的库是JSAP &#xff0c;但这是该…

鸿蒙系统6月可升级,华为鸿蒙2.0系统大规模升级从6月开始?

你现在使用的智能手机是什么&#xff0c;苹果的iPhone手机&#xff0c;华为智能手机&#xff0c;小米手机还是其他智能手机。从操作系统来看目前的智能手机基本上可以分成iPhone手机跟安卓智能手机&#xff0c;其中iPhone手机使用的是iOS系统&#xff0c;而其他智能手机操作系统…

wso2 esb_WSO2 ESB的一种消息传递方式

wso2 esb正如我之前在WSO2 ESB工作时所发布的那样。 为了更好地理解此ESB&#xff0c;我一直在浏览示例 &#xff08;尚未完成所有示例 &#xff09;。 示例12是关于与ESB的单向消息传递&#xff0c;并使用TCP监视器使其可见。 我之前已经介绍过如何设置类似的工具“ TcpTunnel…

android 录像机,android 录像机

一直都做camera 录像功能其实知道的很少&#xff0c;以前也是迷迷糊糊知道怎么写个video&#xff0c;今天测试了一下&#xff0c;各种问题。问题来源首先是对于SDK的阅读不够仔细。 实践的比较少。 其实所谓的录像 就是两个类的结合 一个是Camera 一个是MediaRecorder 这两个类…

Java命令行界面(第21部分):航空公司2

本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库。 Airline 2的GitHub项目页面描述了该库&#xff0c;“ Airline是一个Java库&#xff0c;提供了基于注释的框架来解析命令行界面。” 该页面进入状态&#xff1a;航空公司“既支持简单的单个命令&#xf…

android中进度条的使用,android的进度条使用

android的进度条1、实现的效果2、布局代码先写一个my_browser.xml文件 存放WebViewandroid:layout_width"fill_parent"android:layout_height"fill_parent"android:orientation"vertical" >android:id"id/webView"android:layout_w…

应用服务器web服务器_最受欢迎的应用服务器

应用服务器web服务器这是本系列的第二篇文章&#xff0c;我们将发布有关Java安装的统计数据。 使用的数据集来自免费的Plumbr安装&#xff0c;在过去六个月中&#xff0c;我们总共收集了1,024个不同的环境。 该系列的第一篇文章分析了基础-运行JVM的操作系统&#xff0c;是32位…

如何在Java 8中将Lambda表达式转换为方法引用?

如果您使用Java 8进行编码&#xff0c;那么您会知道使用方法引用代替lambda表达式会使您的代码更具可读性&#xff0c;因此建议尽可能使用方法引用替换lambda表达式&#xff0c;但是&#xff0c;最大的问题是&#xff0c;您如何查找是否可以用方法引用替换lambda&#xff1f; 是…

最大化窗口设置_打开表格总是默认窗口最小化?适用Word、PPT等其他应用

今天有小哥哥说每天早上上班打开第一个表格时&#xff0c;这样显示&#xff1b;打开第二个表时是这样显示&#xff1b;每次打开第二个表后点最大化再打开其他的表才正常显示为最大化的状态。其实&#xff0c;这只是表格的默认打开方式改变了&#xff0c;我们改正过来就好了。在…

html5块元素代码,html5 区块与内联div 与span html块级元素(示例代码)

HTML 和 可以通过 和 将 HTML 元素组合起来。HTML 块元素大多数 HTML 元素被定义为块级元素或内联元素。编者注&#xff1a;"块级元素"译为 block level element&#xff0c;"内联元素"译为 inline element。块级元素在浏览器显示时&#xff0c;通常会以新…

html页面js遍历listview,javascript实现的listview效果

javascript实现的listview效果更新时间&#xff1a;2007年04月28日 00:00:00 作者&#xff1a;#oContainer {width: 600px;height: 500px;border: 1px solid menu;margin: 0px;padding: 0px;overflow: hidden;}a {color: black;text-decoration: none;}a:hover {color: red;t…

Apache Ignite本机持久性,简要概述

通过将数据的工作集放入系统内存中&#xff0c;内存中方法可以达到极高的速度。 当所有数据都保存在内存中后&#xff0c;处理使用传统旋转磁盘引起的问题的需求就消失了。 例如&#xff0c;这意味着无需维护数据的其他缓存副本并管理它们之间的同步。 但是这种方法还有一个缺点…

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

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

Java 9,Jigsaw,JPMS和模块:个人探索

Java 9由于Jigsaw项目而延迟了很多次&#xff0c;您可能会听到很多关于模块&#xff0c;模块化和其他内容的信息&#xff0c;那么&#xff0c;它的全部含义是什么&#xff1f; 模块化到底是什么&#xff0c;模块化平台是什么意思&#xff1f; Java平台模块系统&#xff08;JPMS…