Apache Commons CLI命令行启动

一般来说一个开源项目有好几种启动方式——比如可以从命令行启动,也可以从web端启动。今天就看看如何设计命令行启动...

Apache Commons CLI

Apache Commons CLI是开源的命令行解析工具,它可以帮助开发者快速构建启动命令,并且帮助你组织命令的参数、以及输出列表等。

Maven


    commons-cli
    commons-cli
    1.4

CLI分为三个过程:

  • 定义阶段:在Java代码中定义Options参数,定义参数、是否需要输入值、简单的描述等
  • 解析阶段:应用程序传入参数后,CLI进行解析
  • 询问阶段:通过查询CommandLine询问进入到哪个程序分支中

举个栗子

定义阶段:

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);

其中Option的参数:

  • 第一个参数:参数的简单形式
  • 第二个参数:参数的复杂形式
  • 第三个参数:是否需要额外的输入
  • 第四个参数:对参数的描述信息

解析阶段

通过解析器解析参数

CommandLine commandLine = null;
CommandLineParser parser = new PosixParser();
try {
    commandLine = parser.parse(options, args);
}catch(Exception e){
    // TODO
}

询问阶段

根据commandLine查询参数,提供服务

HelpFormatter hf = new HelpFormatter();
hf.setWidth(110);

if (commandLine.hasOption('h')) {
    // 打印使用帮助
    hf.printHelp("testApp", options, true);
}

全部代码样例

package com.fnpac.gotop.helper.cmd;

import org.apache.commons.cli.*;

/**
 * Created by liuchunlong on 2018/1/14.
 */
public class CLITest {

    public static void main(String[] args) {
        args = new String[]{"-h", "-c", "config.xml"};
        testOptions(args);
    }

    private 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 DefaultParser();

        try {
            commandLine = parser.parse(options, args);
            if (commandLine.hasOption('h')) {
                /*
                    printHelp方法:
                        用指定的命令行语法打印帮助。此方法将帮助信息打印到System.out。
                        Parameters:
                            cmdLineSyntax - 应用程序的语法
                            options - Options 实例
                            autoUsage - 是否打印自动生成的使用说明
                 */
                hf.printHelp("CliTest", options, true);

                // 打印opts的名称和值
                System.out.println("==========================================================");
                Option[] opts = commandLine.getOptions();
                if (opts != null) {
                    for (Option c_opt : opts) {
                        String name = c_opt.getLongOpt();
                        String value = commandLine.getOptionValue(name);
                        System.out.println(name + " -> " + value);
                    }
                }
            }
        } catch (ParseException e) {
            hf.printHelp("CliTest", options, true);
        }

    }
}

运行结果

usage: CliTest [-c ] [-h] [-p]
 -c,--configFile    Name server config properties file
 -h,--help               Print help
 -p,--printConfigItem    Print all config item
==========================================================
help -> null
configFile -> config.xml

你可能感兴趣的:(Apache Commons CLI命令行启动)