Java命令行界面(第5部分):JewelCli
细算在Java命令行处理与Apache的百科全书CLI , args4j , jbock和命令行中先前的文章,我把注意力转向在这个岗位使用JewelCli完成的命令行参数相似的处理Java中。
几个Java命令行处理库使用批注来定义命令行选项。 到目前为止,本系列文章涵盖的四个库中的三个都使用注释,JewelCli也是如此。 JewelCli在到目前为止我所介绍的库中是独一无二的,因为它的注释应用在Java接口上,而不是在Java类或类的构造上。 下一个代码清单演示了如何在Java接口上使用批注来实现JewelCli命令行解析的“定义”阶段。
JewelCli“定义”通过带注释的接口实现
package examples.dustin.commandline.jewelcli;import com.lexicalscope.jewel.cli.Option;/*** Interface defining JewelCli-friendly command-line parameters.*/
public interface MainCommandLine
{@Option(shortName="f", description="Name and path of file to be used.")String getFile();@Option(shortName="v", description="Indicate whether status should be reported verbosely.")boolean isVerbose();@Option(helpRequest=true, description="Usage details on command-line arguments.")boolean getHelp();
}
上面显示的简单界面包含许多与命令行处理相关的内容。 这些选项具有使用shortName
注释类型元素显式指定的单连字符简称,并通过“ get”方法的名称隐式指定(尽管longName
注释类型元素可用于显式指定的长名称[double hyphens]版本)开关)。 命令行选项还具有通过Option
注释提供的各自描述。 helpRequest=true
的使用描述了应使用哪种命令行开关来显示用法/帮助信息。 在这种情况下,因为注释方法名为getHelp()
,所以--help
开关将显示用法信息。 如果我将方法命名为getDustin()
并使用@Option(helpRequest=true)
对其进行注释,则该开关将为--dustin
以显示用法。
除了与方法名称匹配的开关的长名称外,JewelCli在配置情况下利用约定优于配置。 如上所示,在注释了命令行选项的相应接口方法定义后,详细程度开关(返回boolean
)是可选的。 需要文件名切换,因为其对应的getFile()
方法返回String
。 如果我想使文件名可选,则可以在getFile()
方法的@Option
注释中提供defaultValue
,例如@Option(defaultValue="")
。
通过使用JewelCli @Option
注释进行注释的接口(在本例中为MainCommandLine
),我们可以使用JewelCli @Option
“解析”阶段。 在Main
的下一个代码清单中,这与“讯问”阶段一起得到了证明。
JewelCli的“解析”和“审讯”阶段
package examples.dustin.commandline.jewelcli;import static java.lang.System.out;import com.lexicalscope.jewel.cli.CliFactory;/*** Demonstrates use of JewelCli for parsing command-line* parameters in Java.*/
public class Main
{public static void main(final String[] arguments){final MainCommandLine main = CliFactory.parseArguments(MainCommandLine.class, arguments);out.println("You specified file '" + main.getFile() + "' with verbosity setting of '" + main.isVerbose() + "'.");}
}
刚刚显示的Main
类的其中一行“解析” [对CliFactory.parseArguments(Class<T>, String...)
的调用],而另一行“询问” [访问JewelWli-上定义的方法的行带注释的接口,如先前所示]。
以下三个屏幕快照展示了实际中基于JewelCli的代码示例。 第一个图像演示了使用--help
查看用法(注意输出中包含堆栈跟踪)。 第二张图片显示了长( -
)和短( --
)选项开关的不同组合。 第三个图像显示了当未提供必需的命令行参数(在这种情况下为--file
或-f
)时显示的输出消息和关联的堆栈跟踪。
GitHub上提供了本文中用于演示JewelCli应用的这两个类的代码清单。
在选择库来帮助Java进行命令行解析时,需要考虑JewelJli的一些其他特性。
- JewelCli是开源的,并根据Apache软件许可版本2获得许可 。
- 当前的JewelCli ( 0.8.9 )JAR(
jewelcli-0.8.9.jar
/ 2014年2月)大小约为542 KB。 - 无需其他库即可使用JewelCli。
- 如上面的示例所示,JewelCli在Java接口上使用“定义”阶段的注释。 任何以类似方式注释类“ get”方法的尝试都会在运行时产生诸如“ IllegalArgumentException:…不是接口”之类的消息。
- 但是,JewelCli确实支持替代的基于类/实例的方法 ,该方法是对类上的“设置”方法进行注释,而不是对接口上的“获取”方法进行注释。
- JewelCli允许接口从超级接口继承,并且在继承接口中将支持父接口中定义的
@Option
。 - 界面中注释的方法的返回数据类型提供了命令行选项值的类型强制。 枚举甚至可以用作返回数据类型,以将可能的命令行选项类型缩小到一组有限的可能性。
JewelCli易于使用,并且由于其在配置方法方面的约定,因此只需很少的代码即可定义,解析和询问命令行参数。 我发现为定义可解析的命令行选项的接口添加注释的推荐方法在美学上也很令人满意。
其他资源
- JewelCli
- GitHub上的JewelCli
- Maven上的JewelCli
- JewelCli使用介绍
- JewelCli文档/博客
- JewelCLI:Java的简单CLI界面
- JewelCli:替代方案,评论,博客文章和用户
翻译自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-5-jewelcli.html
Java命令行界面(第5部分):JewelCli相关推荐
- Java命令行界面(第30部分):观察
这个有关Java命令行参数解析的系列文章由四个月来发表的29篇文章组成,涵盖了28个不同的开放源代码库,可用于解析Java命令行参数. 这篇文章收集了可以从本系列的前29篇文章中得出的一些观点,并提供 ...
- Java命令行界面(第10部分):picocli
picocli主页面将picocli描述为"强大的微小命令行界面"," picocli"是一个文件Java框架,用于解析命令行参数并生成精美,易于定制的用法帮助 ...
- Java命令行界面(第6部分):JOpt简单
JOpt Simple的主页将这个基于Java的库称为"用于解析命令行选项的Java库,例如您可能传递给调用javac的Java库,"该Java库试图"使用POSIX g ...
- Java命令行界面(第21部分):航空公司2
本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库. Airline 2的GitHub项目页面描述了该库," Airline是一个Java库,提供了基于注释的 ...
- Java命令行界面(第1部分):Apache Commons CLI
尽管我通常使用Groovy编写要从命令行运行的JVM托管脚本,但是有时候我需要解析Java应用程序中的命令行参数,并且有很多库可供Java开发人员用来解析命令行参数. 在本文中,我将介绍这些Java命 ...
- Java命令行界面(第18部分):JCLAP
Giles Winstanley的JCLAP ( Java命令行参数解析器 )是基于Java的命令行处理库的系列文章中介绍的第18个库. 这篇文章的示例基于需要Java 8的 JCLAP 1.4 . ...
- Java命令行界面(第7部分):JCommander
这是我系列的第七篇文章,简要介绍了用于处理Java命令行参数的各种库. 这篇文章回到了基于注释的库的覆盖范围,该库似乎是在Java中可用于处理命令行参数的众多可用库中知名度最高和最受欢迎的库之一: J ...
- Java命令行界面(第28部分):getopt4j
getopt4j的页面将其描述为"一个根据GNU样式解析命令行参数的库." 然后, 页面介绍getopt4j :"'getopt4j'库旨在以与glibc (GNU C运 ...
- Java命令行界面(第12部分):CLAJR
第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 (CLAJR). 该"库"是单个Java源文件( CLAJR-0.9.java ...
最新文章
- 多线程并行和并发的区别
- DX使用随记--GroupControl
- Python基础教程:变量和注释
- python 计算时间重叠_Python基于时间信息(即时、间隔)计算项目之间的相似性...
- 计算机的特别及应用,[计算机软件及应用]Excel使用技巧-非常全.doc
- C++新特性探究(13.5):右值引用
- 您未必知道的Css技巧
- Mysql中eft join、right join、inner join的区别
- 控制物体沿椭圆轨迹运动
- 我的求职之路——首战:毕马威(KPMG)笔试
- 哈曼收购混合现实领域领先公司Apostera
- developer.biao.daily.20140731
- 美术向技美入门课——庄懂的技术美术入门课(美术向)01
- Adobe Premiere视频添加水印图片教程,小白一看就会!
- 解决ConstraintLayout两个组件挤压问题
- SVM 美国威斯康星州乳腺癌检测
- 经典CNN模型介绍及Pytorch实现
- luogu P2698 [USACO12MAR]花盆Flowerpot
- 生成扩散模型漫谈:一般框架之ODE篇
- BCG 对话框表格控件CBCGPGridCtrl(不包含子)