1、功能

Apache Commons CLI 是一个用于解析命令行参数的库,可以轻松处理应用程序中的命令行选项。它支持短选项(如 -h)和长选项(如 --help),并提供丰富的功能,如必填参数、参数类型、帮助信息等

2、使用

<dependency>
  <groupId>commons-cli</groupId>
  <artifactId>commons-cli</artifactId>
  <version>1.4</version> 
</dependency>
import org.apache.commons.cli.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // 创建选项对象
        Options options = new Options();

        // 添加选项 : -h 或 --help 选项,没有参数
        Option help = new Option("h", "help", false, "显示帮助信息");
        options.addOption(help);

        // 添加选项 : -v 或 --version 选项,没有参数
        Option version = new Option("v", "version", false, "显示版本");
        options.addOption(version);

        // 添加选项 : -c 或 --config 选项,后面需要跟参数
        Option config = new Option("c", "config", true, "指定配置文件路径");
        config.setRequired(false); // 可选参数
        options.addOption(config);

        // 解析命令行参数
        CommandLineParser parser = new DefaultParser();
        HelpFormatter formatter = new HelpFormatter();
        CommandLine cmd;
        try {
            cmd = parser.parse(options, args);

            // 处理 -h 或者 --help选项
            if (cmd.hasOption("h")) {
                formatter.printHelp("CommandLineExample", options);
                System.exit(0);
            }

            // 处理 -v 或 --version 选项
            if (cmd.hasOption("v")) {
                System.out.println("版本 1.0");
                System.exit(0);
            }

            // 处理 -c 或 --config 选项
            if (cmd.hasOption("c")) {
                String configFilePath = cmd.getOptionValue("c");
                System.out.println("使用的配置文件路径 :" + configFilePath);
            } else {
                System.out.println("未提供配置文件");
            }

        } catch (Exception e) {
            System.out.println(e.getMessage());
            formatter.printHelp("CommandLineExample", options);
            System.exit(1);
        }
    }
}

3、代码解析

  • Options 类:用于定义选项。每个选项可以有短选项(如 -h)和长选项(如 --help),并且可以指定是否需要参数。代表命令行的一个选项。可以通过 setRequired() 设置是否为必需参数。
  • DefaultParser 类:用于解析命令行参数,生成 CommandLine 对象。
  • CommandLine 类:保存解析后的命令行参数,可以使用 hasOption() 判断某个选项是否存在,用 getOptionValue() 获取选项值。
  • HelpFormatter 类:用于在控制台打印帮助信息

4、结果输出

java Demo -h

usage: CommandLineExample
 -c,--config <arg>   指定配置文件路径
 -h,--help           显示帮助信息
 -v,--version        显示版本信息
java Demo -c /opt/config/application.yaml

使用的配置文件路径: /opt/config/application.yaml
java Demo -v

版本 1.0

journey
32 声望21 粉丝