在使用picocli构建的CLI应用程序中,最合适的方法来实现交互式确认?
该情况是,当运行特定命令时,我需要获得用户的确认才能执行特定任务。我使用了picocli文档中提到的interactive option
,但无法正常工作。
@CommandLine.Option(names = {"-c", "--copy-contract"},
description = "Do you want to copy the contract in to the project?", interactive = true, arity = "1")
boolean isCopy;
运行命令时,上述选项似乎不会触发用户输入。
有什么想法吗?
@Option(names = "-c", interactive = true)
属性将导致picocli在(且仅当)指定了-c
选项时提示用户。
如果未指定-c
选项时,如果应用程序还需要提示用户,则当前需要在应用程序代码中完成。
自picocli 4.3.2起,可以如下完成:
class MyApp implements Runnable {
@Option(names = {"-c", "--copy-contract"},
description = "Do you want to copy the contract in to the project?",
interactive = true, arity = "1")
Boolean isCopy;
public void run() {
if (isCopy == null) {
String s = System.console().readLine("Copy the contract? y/n: ");
isCopy = Boolean.valueOf(s) || "y".equalsIgnoreCase(s);
}
System.out.printf("isCopy=%s%n", isCopy);
}
public static void main(String... args) {
new CommandLine(new MyApp()).execute(args);
}
}
((在将来的版本中有feature request将此包含在picocli中。)