使用commons-cli解析中的命令行选项
2023/8/15大约 2 分钟
See: 使用 commons-cli 解析 Java 中的命令行选项 | Linux 中国 - 知乎 (zhihu.com).
Apache Commons CLI 是一个用于解析命令行参数的Java库。它提供了一种简单且灵活的方式来处理命令行参数,使开发者可以轻松地创建具有命令行界面的应用程序。该库可以解析命令行参数、选项和参数值,并提供一些有用的功能,如生成帮助信息、验证输入等。
以下是一些 Apache Commons CLI 库的基本概念:
- Options(选项): Options 是表示命令行选项的对象。每个选项都有一个短名称(比如
-h)和一个长名称(比如--help),还可以包含描述、是否需要参数等信息。 - OptionsBuilder(选项构建器): OptionsBuilder 类提供了一种链式方法来创建 Options 对象,使添加选项更加便捷。
- CommandLine(命令行对象): CommandLine 对象用于存储解析后的命令行参数和选项。您可以通过 CommandLine 对象获取每个选项的值。
- CommandLineParser(命令行解析器): CommandLineParser 是用于解析命令行参数的接口。
org.apache.commons.cli包提供了几个实现,例如 DefaultParser。 - HelpFormatter(帮助信息格式化): HelpFormatter 可以生成漂亮的帮助信息,显示程序的使用方法、选项说明等。
以下是一个简单的示例,演示如何使用 Apache Commons CLI 来解析命令行参数:
import org.apache.commons.cli.*;
public class CommandLineParserExample {
public static void main(String[] args) {
Options options = new Options();
options.addOption("h", "help", false, "Print help message");
options.addOption("f", "file", true, "Input file name");
CommandLineParser parser = new DefaultParser();
HelpFormatter formatter = new HelpFormatter();
try {
CommandLine cmd = parser.parse(options, args);
if (cmd.hasOption("h")) {
formatter.printHelp("MyApp", options);
}
if (cmd.hasOption("f")) {
String fileName = cmd.getOptionValue("f");
System.out.println("Input file: " + fileName);
}
} catch (ParseException e) {
System.err.println("Parsing failed. Reason: " + e.getMessage());
formatter.printHelp("MyApp", options);
}
}
}在这个示例中,程序会解析命令行参数并检查是否存在 -h 或 --help 选项以及 -f 或 --file 选项。根据选项的存在与否,程序会打印帮助信息或输出输入文件名。
安装
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.5.0</version>
</dependency>使用 OptionBuiler
Option option = Option.builder("c").longOpt("config")
.argName("config")
.hasArg()
.required(true)
.desc("set config file").build();
options.addOption(option);cmd.getOptionValue(...) 如果没有接收到参数,则返回 null。这个方法对于不需要接收参数的选项永远返回 null。
如果选项不需要接收参数,采用 cmd.hasOption(...) 来判断是否携带了该选项。