在picocli中实现交互式确认

时间:2019-06-04 06:45:22

标签: java command-line-interface picocli

在使用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;

运行命令时,上述选项似乎不会触发用户输入。

有什么主意吗?

1 个答案:

答案 0 :(得分:1)

@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中。)