【问题标题】:jCommander - Next Parameter is considered as a valuejCommander - 下一个参数被视为一个值
【发布时间】:2016-02-29 19:58:16
【问题描述】:

我的 JCommander 有问题。如果 required 参数 iam testing 没有价值,我希望程序抛出异常。当我忘记向最后一个参数添加值时,我想要的这个异常就会发生。

示例(注意:所有参数都是必填字符串):

--user hugo --password boss --confirmPassword //no value

com.beust.jcommander.ParameterException: 参数 --comfirmPassword 之后需要一个值

如果我忘记为其他参数添加值,则将下一个参数视为该值。

--user --password --confirmPassword hugo
//--password is considered as the value of user

由于这种行为,无法再找到 --password 并且我得到了错误的异常。

com.beust.jcommander.ParameterException:需要以下选项:--password

有没有办法告诉 jCommander 他不应该将下一个参数视为一个值?

【问题讨论】:

  • 对不起,我真的不明白你想告诉我什么。你能给我解释一下吗?
  • 如果你说--user --password,如果用户名是--password,你会怎么做?即使用户有效也会失败?
  • 这确实是个问题。但 imo 这不太可能。用户忘记为用户添加值的情况可能会更频繁地发生。在这种情况下,用户甚至无法说出问题所在,因为异常并没有说明正确的错误。但可以肯定的是,你是绝对正确的!

标签: java command-line-interface jcommander


【解决方案1】:

所以我检查了文档。

如果您确定您的参数不会以-- 为前缀,您可以单独添加参数验证。

public class IsUserName implements IParameterValidator {
  public void validate(String name, String value)
    throws ParameterException {
      if (value.startsWith("--")) {
        throw new ParameterException("probably missing user name"); 
      }
  }
}

@Parameter(names = "--user", validateWith = IsUserName.class)
private String user;

另一个选项可能是将variableArity 标志与参数验证结合使用。尝试根据 0 长度检查参数。

看看参数验证是如何完成的 (String, String) 对,它很可能不支持可变参数。

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 2021-10-26
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2023-03-05
    • 2023-03-15
    相关资源
    最近更新 更多