带有 picocli 的可扩展应用程序。最佳实践问题

假设我的项目有很多逻辑,并且有一些入口点,它们是 CLI 命令。

我用 注释我的入口点@Command,初始化我@Parameters@Option注释的字段并执行逻辑,不再需要 CLI。

在我看来,为main每个带@Command注释的类声明 1 个方法适合我,但是,我不确定这是否是个好主意。

也许某种CommandFactory是必要的?

我之前从未构建过 CLI 应用程序或使用过 picocli,所以如果我的思考过程有误,请指出。


Qyouu
浏览 126回答 1
1回答

陪伴而非守候

main对于@Command作为入口点的每个方法都有一个单独的方法是完全没问题的。main需要该方法,以便可以从命令行独立调用该命令。例如:@Command(name = "hello")class Hello implements Runnable {    public static void main(String[] args) {        CommandLine.run(new Hello(), args);    }    public void run() { System.out.println("hello"); }}@Command(name = "bye")class Bye implements Runnable {    public static void main(String[] args) {        CommandLine.run(new Bye(), args);    }    public void run() { System.out.println("bye"); }}一种例外情况是当您的应用程序具有带有子命令的命令时。在这种情况下,您只需要main为顶级命令提供方法,而不需要为子命令提供方法。带有子命令的示例:@Command(name = "git", subcommands = {Commit.class, Status.class})class Git implements Runnable {    public static void main(String[] args) { // top-level command needs main        CommandLine.run(new Git(), args);    }    public void run() { System.out.println("Specify a subcommand"); }}@Command(name = "commit")class Commit implements Runnable {    @Option(names = "-m") String message;    @Parameters File[] files;    public void run() {        System.out.printf("Committing %s with message '%s'%n",                Arrays.toString(files), message);    }}@Command(name = "status")class Status implements Runnable {    public void run() { System.out.println("All ok."); }}注意,main当有子命令时,只有顶级命令需要一个方法。即使使用子命令,也不需要工厂。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java