【问题标题】:When I pass more than three options using apache commons CLI..the result is displaying as NULL for third option当我使用 apache commons CLI 传递三个以上的选项时,结果显示为 NULL 第三个选项
【发布时间】:2021-04-24 19:36:41
【问题描述】:

当我在 cmd.. 中传递三个以上的选项时,结果显示为 NULL

 package main.java;
import org.apache.commons.cli.*;

public class cli {

    public static void main(String[] args) throws Exception {
         Options options = new Options();
     Option token = new Option("t", "token", true, "token");
     token.setRequired(true);
     options.addOption(token);

     Option projectname = new Option("p", "projectname", true, "project");
     projectname.setRequired(true);
     options.addOption(projectname);
     
     Option branch = new Option("b", "branchname", true, "branch");
     branch.setRequired(true);
     options.addOption(branch);
     
     Option pullreq = new Option("PR", "pullreq", true, "pullreq");
     pullreq.setRequired(true);
     options.addOption(pullreq);
     CommandLineParser parser = new DefaultParser();
     HelpFormatter formatter = new HelpFormatter();
     CommandLine cmd = null;

     try {
         cmd = parser.parse(options, args);
     } catch (ParseException e) {
         System.out.println(e.getMessage());
         formatter.printHelp("utility-name", options);

         System.exit(1);
     }

     String token1 = cmd.getOptionValue("token");
     String projectname1 = cmd.getOptionValue("projectname");
     String branch1 = cmd.getOptionValue("branch");
     String pullreq1 = cmd.getOptionValue("pullreq");
     
   /*if(pullreq != null){
         String pullreq1 = cmd.getOptionValue("pullreq");
         System.out.println(pullreq1);
     }
     */
     System.out.println(token1);
     System.out.println(projectname1);
     System.out.println(branch1);

 }
    }

当我构建它时,第三个和第四个选项值被视为空。 java -jar testreport-1.0.2-SNAPSHOT.jar -t token -p project -b branch -PR pullreq

令牌 项目 空

【问题讨论】:

  • 也许你应该重载这个函数。

标签: java jar command-line-arguments apache-commons java-process-runtime


【解决方案1】:

问题出在这一行:

String branch1 = cmd.getOptionValue("branch");

您只是忘记了Options 实例的相应选项具有"branchname" 的长选项属性,而不仅仅是"branch"。所以你可以简单地把它改成:

String branch1 = cmd.getOptionValue("branchname");

它会起作用的。至少对我来说是这样。

【讨论】:

  • 嗨,我已经尝试过这种方式..但是当我提供超过 2 个选项时..该值被打印为 null..不知道为什么?我已经编辑了我的问题。
  • 你为什么改变你的问题这么多?您首先发布的问题与现在发布的问题完全不同。现在我给出的答案似乎无关紧要。但是,当您第一次发布它时,它可能是您问题的答案。如果您有不同的问题,最好将它们发布为不同的帖子。例如,您的第一个问题是“如何解析 CLI args?”,然后您将其更改为“为什么 Apache Commons CLI 解析我的 args 错误?”或类似的东西......无论如何,我会尽量回答你当前的(第二个)问题。
  • 好的,我编辑了我的答案以符合您的上一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多