使用 Apache Commons CLI 开发命令行工具示例
Apache Commons CLI 是 Apache 下面的一个解析命令行输入的工具包,该工具包还提供了自动生成输出帮助文档的功能。
Apache Commons CLI 支持多种输入参数格式,主要支持的格式有以下几种:
POSIX(Portable Operating System Interface of Unix)中的参数形式,例如 tar -zxvf foo.tar.gz
CLI 命令代码实现
命令行程序处理流程相对比较简单,主要流程为设定命令行参数 - 解析输入参数 - 使用输入的数据进行逻辑处理
CLI 定义阶段
每一条命令行都必须定义一组参数,它们被用来定义应用程序的接口。Apache Commons CLI 使用 Options 这个类来定义和设置参数,它是所有 Option 实例的容器。在 CLI 中,目前有两种方式来创建 Options,一种是通过构造函数,这是最普通也是最为大家所熟知的一种方式;另外一种方法是通过 Options 中定义的工厂方式来实现。
CLI 定义阶段的目标结果就是创建 Options 实例。
// 创建 Options 对象 Options options = new Options(); // 添加 -h 参数 options.addOption("h", false, "Lists short help"); // 添加 -t 参数 options.addOption("t", true, "Sets the HTTP communication protocol for CIM connection");
其中 addOption() 方法有三个参数,第一个参数设定这个 option 的单字符名字,第二个参数指明这个 option 是否需要输入数值,第三个参数是对这个 option 的简要描述。在这个代码片段中,第一个参数只是列出帮助文件,不需要用户输入任何值,而第二个参数则是需要用户输入 HTTP 的通信协议,所以这两个 option 的第二个参数分别为 false 和 true
CLI 解析阶段在解析阶段中,通过命令行传入应用程序的文本来进行处理。处理过程将根据在解析器的实现过程中定义的规则来进行。在 CommandLineParser 类中定义的 parse 方法将用 CLI 定义阶段中产生的 Options 实例和一组字符串作为输入,并返回解析后生成的 CommandLine。
CLI 解析阶段的目标结果就是创建 CommandLine 实例。
CommandLineParser parser = new PosixParser(); CommandLine cmd = parser.parse(options, args); if(cmd.hasOption("h")) { // 这里显示简短的帮助信息 }CLI 询问阶段
在询问阶段中,应用程序通过查询 CommandLine,并通过其中的布尔参数和提供给应用程序的参数值来决定需要执行哪些程序分支。这个阶段在用户的代码中实现,CommandLine 中的访问方法为用户代码提供了 CLI 的询问能力。
CLI 询问阶段的目标结果就是将所有通过命令行以及处理参数过程中得到的文本信息传递给用户的代码。
commandLine = parser.parse(options, args); if (commandLine.hasOption(h)) { //打印使用帮助 hf.printHelp("testApp", options, true); }代码示例
import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser;
public static void main(String[] args) { String[] arg = { "-h", "-c", "config.xml" }; testOptions(arg); }
public static void testOptions(String[] args) { Options options = new Options(); Option opt = new Option("h", "help", false, "Print help"); opt.setRequired(false); options.addOption(opt); opt = new Option("c", "configFile", true, "Name server config properties file"); opt.setRequired(false); options.addOption(opt); opt = new Option("p", "printConfigItem", false, "Print all config item"); opt.setRequired(false); options.addOption(opt); HelpFormatter hf = new HelpFormatter(); hf.setWidth(110); CommandLine commandLine = null; CommandLineParser parser = new PosixParser(); try { commandLine = parser.parse(options, args); if (commandLine.hasOption(h)) { // 打印使用帮助 hf.printHelp("testApp", options, true); } // 打印opts的名称和值 System.out.println("--------------------------------------"); Option[] opts = commandLine.getOptions(); if (opts != null) { for (Option opt1 : opts) { String name = opt1.getLongOpt(); String value = commandLine.getOptionValue(name); System.out.println(name + "= " + value); } } } catch (ParseException e) { hf.printHelp("testApp", options, true); } } }
Apache Commons Codec: Apache Commons Codec (TM) software provides implementations of common encoders and decoders such as Base64, Hex, Phonetic and URLs. Apache Commons Codec(TM)软件提供常见编码器和解码器的实现,如Base64,Hex,Phonetic和URL。
相关文章
- docker搭建apache php环境步骤总结「建议收藏」
- noclassdeffounderror:org/apache_apache server at port 80
- Apache配置虚拟主机_apache中配置虚拟主机的作用
- Apache配置虚拟主机_apache启动但是访问不到
- SpringBoot打包:Failed to execute goal org.apache.maven.plugins
- 【Web开发】使用Apache搭建Http下载服务器
- Apache Airflow:安装指南和基本命令
- 解决json结合struts2时,Class org.apache.struts2.json.JSONWriter can not access a member of * 的问题详解编程语言
- 结合开发,推动进步: Apache与MySQL的协作(apache和mysql)
- Linux下启动Apache服务的方法(linux启动apache)
- Linux 下 Apache 服务器安装指南(linux安装apache)
- 如何在Debian 10上安装Apache OFBiz 客户关系系统(CRM)
- 中国首个个人主导的 Apache 孵化项目 SkyWalking 成功毕业
- 实现Linux搭建Apache服务器的简单指南(linux装apache)
- 解决多种web问题Linux下Apache解决多种Web问题:让你的网络更安全可靠(linux下apache)
- apache中封IP的实现方法
- apache和php之间协同工作的配置经验分享
- 本地机apache配置基于域名的虚拟主机详解
- CentOS6.3下源码安装LAMP(Linux+Apache+Mysql+Php)运行环境步骤
- apache集成php5.6方法分享
- Windows系统下Apache、PHP无法启动问题总结