2015-11-26 5 views
1

У меня проблема с JCommander. Я хочу, чтобы программа выбрала исключение, если требуемый параметр iam testing не имеет значения. Это исключение, которое я хочу, возникает, когда я забываю добавить значение к последнему параметру.jCommander - Следующий параметр считается значением

Пример (примечание: все параметры требуется и строки):

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

com.beust.jcommander.ParameterException: Ожидаемое значение после того, как параметр --comfirmPassword

Если я забуду добавить значение к другим параметрам, следующий параметр будет считаться значением.

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

Вследствие такого поведения, пароль не может быть найден, и я получаю неправильное исключение.

com.beust.jcommander.ParameterException: следующие опции необходимы: --password

Есть ли способ сказать jCommander, что он не должен рассматривать следующий параметр в качестве значения?

+0

Извините, я действительно не понимаю, что вы пытаетесь мне рассказать. вы можете объяснить мне это? – leimooo

+0

, если вы говорите '--user --password', что вы делаете в случае, если имя пользователя' --password'? сбой, даже если пользователь действителен? – Alex

+0

Это действительно проблема. Но это маловероятно. Пользователь, забывающий добавлять значение к пользователю, может чаще встречаться. И в этом сценарии пользователь не может даже сказать, в чем проблема, поскольку исключение не говорит о правильной ошибке. Но конечно, вы абсолютно правы! – leimooo

ответ

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 флаг в сочетании с параметром Validation. попробуйте Проверить параметр на 0 длины.

Рассматривая, как выполняется проверка параметров (String, String), он, скорее всего, не поддерживает аргументы переменной arity.