我有一个简单Command
的强制性参数:
@Parameters(index = "0", description = "manifest")
private File manifest;
当我在没有参数的情况下从命令行调用它时,我得到了预期的消息:
Missing required parameter: <manifest>
Usage ....
但是:调用的返回码为java
0,表示一切正常。如果参数(或选项)丢失/不正确,有没有办法picocli
返回非零代码?
我有一个简单Command
的强制性参数:
@Parameters(index = "0", description = "manifest")
private File manifest;
当我在没有参数的情况下从命令行调用它时,我得到了预期的消息:
Missing required parameter: <manifest>
Usage ....
但是:调用的返回码为java
0,表示一切正常。如果参数(或选项)丢失/不正确,有没有办法picocli
返回非零代码?
是的,这是可能的。
更新:由于 picocli 4.0 退出代码支持非常容易使用该
execute
方法。
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);
}
}
有计划在 4.0 版中为 picocli添加更好的退出代码支持。