#picocli
#picocli
Вопрос:
У меня есть простой Command
с одним обязательным параметром:
@Parameters(index = "0", description = "manifest")
private File manifest;
Когда я вызываю его из командной строки без параметра, я получаю ожидаемое сообщение:
Missing required parameter: <manifest>
Usage ....
НО: код возврата для вызова java
равен 0, что означает, что все прошло нормально.
Есть ли способ picocli
вернуть ненулевой код, если параметр (или опция) отсутствует / некорректен?
Ответ №1:
Да, это возможно.
ОБНОВЛЕНИЕ: С помощью
execute
метода поддержка кода выхода picocli 4.0 очень проста.
Пример с picocli 4.0:
@Command
class ExitCodeDemo implements Callable<Integer> {
@Parameters(index = "0", description = "manifest")
private File manifest;
public Integer call() {
// business logic here
return ok ? 0 : 123;
}
public static void main(String... args) {
int exitCode = new CommandLine(new ExitCodeDemo()).execute(args);
System.exit(exitCode);
}
}
Вышеуказанная программа завершит работу с, 1
если в бизнес-логике возникло исключение, 2
если пользовательский ввод был неверным, и если все прошло хорошо, завершит работу с, 0
или 123
в зависимости от бизнес-логики (см. call
Метод).
Если для вашего приложения достаточно «стандартных» кодов ошибок, вы также можете реализовать Runnable
.
До picocli 4.0 приложениям необходимо было использовать parseWithHandlers
метод. Сейчас это не рекомендуется, но вот пример. Следующая программа завершит работу с кодом выхода 456, если пользователь ввел неверный ввод:
// OLD: for picocli versions before 4.0 (DEPRECATED)
//
@Command
class Deprecated implements Runnable {
@Parameters(index = "0", description = "manifest")
private File manifest;
public void run() {
// business logic here
}
public static void main(String... args) {
CommandLine cmd = new CommandLine(new Deprecated());
cmd.parseWithHandlers(
new RunLast(),
CommandLine.defaultExceptionHandler().andExit(456),
args);
}
}
Планируется добавить лучшую поддержку кода выхода в picocli в версии 4.0.