【问题标题】:Skip unknown command line arguments跳过未知的命令行参数
【发布时间】:2011-04-10 06:43:16
【问题描述】:

在我拥有的当前应用程序中,传入的命令行参数在几个“级别”上进行解析。

在最高级别,我只想解析一些选项并将其余的留给“较低级别”。但是,到目前为止,我尝试过的所有库(Common Cli、args4j、JOpt、gnu.jargs)在我尝试为它们提供未知选项时都会抛出“未知选项”异常。

我真的不想再写一个命令行解析类。是否有一个库/类可以解析这些选项并跳过未知选项?

谢谢

【问题讨论】:

  • 你能举个例子吗?

标签: java command-line command-line-arguments


【解决方案1】:

jopt 允许您指定默认值。不抛出异常。

parser.accepts("count").withOptionalArg().ofType(Integer.class).defaultsTo(-1);

【讨论】:

    【解决方案2】:

    有更好的解决方案。

    public static BiFunction<String[],CmdLineParser,String[]> stripUnusedArgs=(args,parser)->{
    
        List<String> accepteds=parser.getOptions().stream().map(opt->opt.option.toString()).collect(Collectors.toList());
        List<String> stripedArgs=new ArrayList<>();
        for(int i=0; i< args.length;i++){
            if(accepteds.contains(args[i])){
                stripedArgs.add(args[i]);
                stripedArgs.add(args[i+1]);
            }
        }
        return stripedArgs.toArray(new String[0]);
    };
    

    然后使用它:

    CmdLineParser parser = new CmdLineParser(CustomArgsObject);
    stripUnusedArgs.apply(args,parser);
    

    【讨论】:

      【解决方案3】:

      对于 Args4j,我认为 SubCommandHandler 可能就足够了。 https://args4j.kohsuke.org/apidocs/org/kohsuke/args4j/spi/SubCommandHandler.html

      【讨论】:

        猜你喜欢
        • 2018-05-12
        • 2015-06-03
        • 1970-01-01
        • 2014-12-25
        • 1970-01-01
        • 2018-06-24
        • 2013-10-01
        • 1970-01-01
        • 2019-08-30
        相关资源
        最近更新 更多