Java 带Apache commons CLI的条件命令行选项
我目前正在使用Apache的公共CLI库来解析命令行选项,我想知道是否有一种简单的方法可以满足条件需求 例如,在下面的示例中,我有两个必需的选项Java 带Apache commons CLI的条件命令行选项,java,apache-commons-cli,Java,Apache Commons Cli,我目前正在使用Apache的公共CLI库来解析命令行选项,我想知道是否有一种简单的方法可以满足条件需求 例如,在下面的示例中,我有两个必需的选项-a和-b,以及一个可选的-h,应该会显示一些说明。解析器现在的工作方式是,只要缺少一个必需的选项,它就会抛出ParserException。到现在为止,一直都还不错。我的问题是,如果指定了-h,是否有办法不查找所需的选项。由于-h通常只打印帮助而不实际启动我的应用程序,因此我想跳过检查其他命令行选项 import org.apache.commons.
-a
和-b
,以及一个可选的-h
,应该会显示一些说明。解析器现在的工作方式是,只要缺少一个必需的选项,它就会抛出ParserException。到现在为止,一直都还不错。我的问题是,如果指定了-h
,是否有办法不查找所需的选项。由于-h
通常只打印帮助而不实际启动我的应用程序,因此我想跳过检查其他命令行选项
import org.apache.commons.cli.*;
公共类MyClass{
...
公共静态void main(字符串[]参数)
{
选项=新选项();
Option opt_a=Option.builder(“a”)
.argName(“A选项”)
。必需(正确)
.longOpt(“a选项”)
.desc(“第一选项”)
.build();
Option opt_b=Option.builder(“b”)
.argName(“B选项”)
。必需(正确)
.longOpt(“b选项”)
.desc(“第二选项”)
.build();
Option opt_h=Option.builder(“h”)
.argName(“帮助”)
.longOpt(“帮助”)
.desc(“显示此帮助”)
.build();
选项。添加选项(选项a);
选项。添加选项(选项b);
选项。添加选项(opt_h);
CommandLineParser parser=新的DefaultParser();
试一试{
CommandLine cmd=parser.parse(选项、参数);
...
}捕获(解析异常){
System.err.println(“错误解析命令行选项”);
System.err.println(e.getMessage());
使用(选项);
系统出口(1);
}
}
公共静态无效用法(选项){
String header=“我的应用程序\n\n”;
String footer=“\n请在以下位置报告问题:http://github.com/user/repo/issues";
HelpFormatter formatter=新的HelpFormatter();
printHelp(“MyApp”、页眉、选项、页脚、true);
}
}
在我看来,您可能会使用以下描述的:
一组相互排斥的选项
因此,您将使用-h
构建一个选项组
,并使用所有其他选项构建一个。然后添加两个OptionGroup
s
补充 一些人建议使用多个解析尝试:
Options mainOptions = new Options();
Option opt_a = Option.builder("a")
.argName("A Option")
.required(true)
.longOpt("a-option")
.desc("First option")
.build();
Option opt_b = Option.builder("b")
.argName("B Option")
.required(true)
.longOpt("b-option")
.desc("Second option")
.build();
mainOptions.addOption(opt_a);
mainOptions.addOption(opt_b);
Options helpOptions = new Options();
Option opt_h = Option.builder("h")
.argName("Help")
.longOpt("help")
.desc("Shows this help")
.build();
helpOptions.addOption(opt_h);
CommandLineParser parser = new DefaultParser();
try {
CommandLine cmds = parser.parse(helpOptions, args, true);
// have they specified a help option?
if (cmds.getOptions().length == 0) {
// No! Try normal options.
cmds = parser.parse(mainOptions, args);
} else {
// They specified a help option.
}
//...
} catch (ParseException e) {
System.err.println("Error parsing command line options");
System.err.println(e.getMessage());
System.exit(1);
}
不幸的是,一组中的所有选项都是相互独立的,但我更希望有两组相互独立的选项。我不确定这是
OptionGroup
应该用来做的。@FLekschas-在这种情况下你需要多次解析。请看我对我的问题的评论;)我在这里找到了问题的答案:所以我的问题是重复的。