标签: apache-commons-cli

Apache Commons CLI - 订购帮助选项?

我正在使用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).

只是想知道有没有人做过类似的事情?

谢谢

java apache-commons apache-commons-cli

9
推荐指数
4
解决办法
5643
查看次数

-help选项中的Apache Commons CLI多个参数值名称

我使用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

9
推荐指数
2
解决办法
2万
查看次数

使用apache commons cli定义位置参数

我想定义一个包含命名参数和位置参数的Apache Commons CLI解析器.

program [-a optA] [-b optB] [-f] pos1 pos2
Run Code Online (Sandbox Code Playgroud)

如何验证pos1和pos2?

apache-commons-cli

9
推荐指数
1
解决办法
1652
查看次数

使用Apache Commons CLI的互斥选项

我可以使用以下方法创建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)

是否可以创建互斥选项,以便:

或者:

  1. 必须提供选项a或
  2. 必须提供选项b和c

我看不到使用OptionGroup的方法吗?

java apache-commons apache-commons-cli

8
推荐指数
1
解决办法
5917
查看次数

Apache Commons CLI:如何防止使用短名称选项?

在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

8
推荐指数
1
解决办法
2089
查看次数

Apache Commons CLI DefaultParser NoSuchMethod错误

我有一段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)

java apache-commons-cli

8
推荐指数
1
解决办法
1021
查看次数

如何确保在Apache Commons CLI中提供所有参数?

我没有看到一种标准方法来检查是否所有选项都在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)

java error-checking apache-commons apache-commons-cli

7
推荐指数
1
解决办法
7431
查看次数

当用户只想打印使用情况时,如何避免所需选项的ParserException?

所以我有一个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)抛出异常时,如果seq1seq2不存在 - 但我希望它打印我的消息并且没有异常抛出 - 如何去做?这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)

java apache-commons-cli

7
推荐指数
1
解决办法
3493
查看次数

commons-cli依赖的论点

我使用apache commons-cli作为命​​令行工具.我有成对的依赖参数,例如,只有当参数A存在时,参数B才有意义.这将有两个好处:自动警告/错误和更有用的使用声明.commons-cli是否支持它?

apache-commons-cli

7
推荐指数
1
解决办法
1421
查看次数

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)

我有一个参数,但没有附加相应的选项标识符的地方,因此可以将其传递给 …

java apache-commons-cli

7
推荐指数
2
解决办法
3293
查看次数