jCommander - 下一个参数被视为一个值

时间:2015-11-26 16:36:12

标签: java command-line-interface jcommander

我对JCommander有疑问。如果必需参数iam测试没有值,我希望程序抛出异常。当我忘记为最后一个参数添加值时,我想要这个例外。

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

--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他不应该将下一个参数视为一个值?

1 个答案:

答案 0 :(得分: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)对,它很可能不支持变量arity参数。