11

我正在尝试将 Java 中的命令行参数解析为以下用法:

Usage: gibl FILE
 -h,  --help      Displays this help message.
 -v,  --version   Displays the program version.
 FILE             Source file.

使用 Apache Commons CLI 库,我知道我可以选择使用Option's 来解析-h-v命令,然后使用CommandLine.getArgs()来获取剩余的参数FILE,然后根据需要对其进行解析,但我实际上想将其指定为OptionCLI 中的一个。

目前,我执行以下操作:

if (cmd.getArgs().length < 1) {
    System.out.println("Missing argument: FILE");
    help(1); // Prints the help file and closes the program with an exit code of 1.
}
String file = cmd.getArgs()[0];

但是,当我调用HelpFormatter.printHelp(String, Options)我的额外参数时,不会包含在自动生成的帮助文本中。

我所追求的是这样的:

Option file = new Option("Source file.");
file.setRequired(true);
options.addOption(file);

我有一个参数,但没有附加相应的选项标识符,因此可以将它传递给HelpFormatter. 有任何想法吗?

4

2 回答 2

9

Apache Commons CLI 1.4:

您可以通过以下方式访问没有关联标志的命令行参数:

org.apache.commons.cli.CommandLine#getArgList()

它返回所有未使用/解析的参数的列表。

因此,您可以通过以下方式获取定义的选项:

  • org.apache.commons.cli.CommandLine#getOptionValue("option-name")
  • org.apache.commons.cli.CommandLine#hasOption("option-name")
  • (...)

或通过上述方式获取所有未解析/无法识别的选项的列表:

org.apache.commons.cli.CommandLine#getArgList()

于 2017-08-24T13:37:38.590 回答
5

据我所知,Commons CLI 不支持定义没有关联标志的选项。我认为您将需要按照以下方式做一些事情:

new HelpFormatter().printHelp("commandName [OPTIONS] <FILE>", Options);

如果您没有看到,这个问题非常相似,我的答案与那里的答案非常相似。

于 2017-08-13T03:57:48.330 回答