我正在使用Apache Commons CLI.默认情况下,它按键按字母顺序命令命令行上的选项.那么,看来是:
-csv
-ip
-msisdn
-xml
Run Code Online (Sandbox Code Playgroud)
但我想按如下顺序排序:
-csv
-xml
-ip
-msisdn
Run Code Online (Sandbox Code Playgroud)
我知道你可以使用一个OptionFormatter类并传递给HelpFormatter,但是看不到任何关于如何将它用于上述目的的例子(http://www.marko.homeunix.org/programming/java/公地-CLI/API /组织/阿帕奇/公地/ CLI/HelpFormatter.OptionComparator.html).
只是想知道有没有人做过类似的事情?
谢谢
我使用Apache Commons CLI来解析命令行参数.
我正在寻找一种在帮助中显示多个参数值名称的方法.以下是选项"startimport"的一个参数的示例:
Option startimport = OptionBuilder
.withArgName("environment")
.hasArg()
.withDescription(
"Description")
.create("startimport");
Run Code Online (Sandbox Code Playgroud)
当我使用-help打印出来:
-startimport <environment> Description
Run Code Online (Sandbox Code Playgroud)
那很好.但是,如果我想使用两个参数呢?
Option startimport = OptionBuilder
.withArgName("firstArg secondArg")
.hasArgs(2)
.withDescription("Description")
.create("startimport ");
Run Code Online (Sandbox Code Playgroud)
解析这两个参数不是问题,但我想在"-help"中输出以下内容:
startimport <firstArg> <secondArg> Description
Run Code Online (Sandbox Code Playgroud)
但目前我会得到:
startimport <firstArg secondArg> Description
Run Code Online (Sandbox Code Playgroud)
这个问题有适当的解决方案吗?
java command-line arguments command-line-interface apache-commons-cli
我想定义一个包含命名参数和位置参数的Apache Commons CLI解析器.
program [-a optA] [-b optB] [-f] pos1 pos2
Run Code Online (Sandbox Code Playgroud)
如何验证pos1和pos2?
我可以使用以下方法创建2个互斥选项:
Option a = OptionBuilder.create("a");
Option b = OptionBuilder.create("b");
OptionGroup optgrp = new OptionGroup();
optgrp .setRequired(true);
optgrp .addOption(a);
optgrp .addOption(b);
Run Code Online (Sandbox Code Playgroud)
以上将迫使用户提供选项a或选项b.
但如果我有第三种选择,c:
Option c = OptionBuilder.create("c");
Run Code Online (Sandbox Code Playgroud)
是否可以创建互斥选项,以便:
或者:
我看不到使用OptionGroup的方法吗?
在Apache Commons CLI lib中,是否可以绕过短名称的使用,从而迫使用户使用长名称?
通常,选项定义如下:
new Option("u", "username", true, "automatic user name")
Run Code Online (Sandbox Code Playgroud)
我想禁止使用"你".但是,如果我用null空字符串替换它,有例外...
为什么这个要求?我希望我的所有选项只能以--optionName = optionValue的形式出现,因为我的应用程序的某些部分是Spring Boot,而Spring Boot默认选择此格式的选项.
此外,为了保持开发人员和用户之间的一致性并简化文档,我发现如果我们有一种使用选项而不是2的独特方式会更好.
java command-line-interface apache-commons apache-commons-cli
我有一段Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.hasShortOption(Ljava/lang/String;)Z时间试图创建一个实例DefaultParser.
我的代码:
Options options = new Options();
// option for day offset
options.addOption(new Option("d", "day", true, "Day offset. -d 7 will
request for last weeks data"));
//options.addOption("d", "day", true, "Day offset. -d 7 will request for last weeks data");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, args);
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.hasShortOption(Ljava/lang/String;)Z
at org.apache.commons.cli.DefaultParser.handleShortAndLongOption(DefaultParser.java:491)
at org.apache.commons.cli.DefaultParser.handleToken(DefaultParser.java:243)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:120)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:76)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:60)
at domain.Main.main(Main.java:60)
Run Code Online (Sandbox Code Playgroud)
第60行是这样的:
CommandLine cmd …Run Code Online (Sandbox Code Playgroud) 我没有看到一种标准方法来检查是否所有选项都在String []输入中提供给apache的CLI库.那是 - 我的选项在命令行都是REUIRED,否则,我想要抛出异常.
我尝试以下作为解决方法,但在if语句中获取Nullpointer异常...
PosixParser p = new PosixParser();
CommandLine cli=p.parse(options,args);
for(Object o : options.getOptions())
{
Option op = (Option)o;
if(cli.getOptionValue(op.getName()))
throw new ParseException("Missing argument ! " + op.getArgName() + ":"+op.getDescription());
}
Run Code Online (Sandbox Code Playgroud)
更新:getOpt()方法似乎提供了参数短名称.
但是,如果我用op.getLongName()替换op.getName()......它可以工作!
无论如何......我有两个问题:
1)为什么一个选项有一个空名称,但是一个非null的longName?
2)有没有办法简单地确保所有选项都提供String []?例如,我想打电话:
if(! options.isAllProvided())
throw new ParseException("You are missing some options ! " + StringUtils.join(userInputArray,','));
Run Code Online (Sandbox Code Playgroud) 所以我有一个Options实例,其中包括其他选项(注意isRequired()):
options.addOption(OptionBuilder
.withLongOpt("seq1")
.withDescription("REQUIRED : blah blah")
.hasArg().isRequired().create());
options.addOption(OptionBuilder
.withLongOpt("seq2")
.withDescription("REQUIRED : blih blih")
.hasArg().isRequired().create());
options.addOption(new Option("?", "help", false,
"print this message and exit"));
Run Code Online (Sandbox Code Playgroud)
当我调用parser.parse(args)抛出异常时,如果seq1和seq2不存在 - 但我希望它打印我的消息并且没有异常抛出 - 如何去做?这line.hasOption("help")自然会引入NPE :
CommandLine line = null;
try {
CommandLineParser parser = new GnuParser();
// parse the command line arguments
line = parser.parse(options, args);
} catch (ParseException e) {
if (line.hasOption("help")) { //NPE
usage(0);
}
System.err.println("Parsing failed. Reason: " + e.getMessage()); …Run Code Online (Sandbox Code Playgroud) 我使用apache commons-cli作为命令行工具.我有成对的依赖参数,例如,只有当参数A存在时,参数B才有意义.这将有两个好处:自动警告/错误和更有用的使用声明.commons-cli是否支持它?
我正在尝试将Java中的命令行参数解析为以下用法:
Usage: gibl FILE
-h, --help Displays this help message.
-v, --version Displays the program version.
FILE Source file.
Run Code Online (Sandbox Code Playgroud)
使用Apache Commons CLI库,我知道我可以选择使用Option来解析-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];
Run Code Online (Sandbox Code Playgroud)
但是,当我调用HelpFormatter.printHelp(String, Options)我的额外参数时,它不会包含在自动生成的帮助文本中。
我所追求的是这样的:
Option file = new Option("Source file.");
file.setRequired(true);
options.addOption(file);
Run Code Online (Sandbox Code Playgroud)
我有一个参数,但没有附加相应的选项标识符的地方,因此可以将其传递给 …