Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 让Picocli使用Springboot应用程序_Java_Spring_Spring Boot_Maven_Picocli - Fatal编程技术网

Java 让Picocli使用Springboot应用程序

Java 让Picocli使用Springboot应用程序,java,spring,spring-boot,maven,picocli,Java,Spring,Spring Boot,Maven,Picocli,我必须将大型Spring引导应用程序转换为灵活的CLI工具,其中Spring引导应用程序发送的请求(除其他外)由命令行上的用户输入决定。我决定使用picocli来实现命令行功能,但是我甚至不知道如何做一些简单的事情,比如向stdout打印一些文本。如果用户传递一个给定的选项标志,Spring boot将正常运行。我该如何写这篇文章,使picocli能够与Spring boot一起工作(并最终控制所有Spring boot的东西)作为后续工作,我最终通过将“控制器方法”重构为3,使代码正常工作,如

我必须将大型Spring引导应用程序转换为灵活的CLI工具,其中Spring引导应用程序发送的请求(除其他外)由命令行上的用户输入决定。我决定使用picocli来实现命令行功能,但是我甚至不知道如何做一些简单的事情,比如向stdout打印一些文本。如果用户传递一个给定的选项标志,Spring boot将正常运行。我该如何写这篇文章,使picocli能够与Spring boot一起工作(并最终控制所有Spring boot的东西)

作为后续工作,我最终通过将“控制器方法”重构为3,使代码正常工作,如下所示:

|
|_
MainApp.java

|_
CmdRunner.java

|_
command.java

其中MainApp是
@springbootplication
,它基本上只做:

System.exit(SpringApplication.exit(new SpringApplication(MainApp.class).run(args)));
开始一切

CmdRunner是SpringBoot提供的
CommandLineRunner
接口的一个
@组件
&简单实现,最重要的一点如下:

    @Autowired
    private TheCommand theCommand;

    @Override
    public void run(String... args) {
       new CommandLine(theCommand).execute(args);
    }
它在新的picocli
CommandLine
对象上执行传递的cli参数(从MainApp.java传递给它)。这就引出了最后一个类,
Command.java
,它同时是一个picocli
@命令
&Springboot
@控制器
实现了
可运行
接口。基本上只包含我需要交付的所有逻辑和(不断增长的)功能


此实现的唯一缺点是,当用户使用
--help
标志运行它时,应用程序仍然运行spring boot功能,这使得它在特定场景中有点无响应。

我可以使用@SpringBootApplication implement
CommandLineRunner
主应用程序吗?然后所有的
commandline
参数都由'void run'处理,或者我定义了一个单独的组件作为commandLineRunner,spring会自动计算出如果有任何commandline参数,应该使用run()?你看过文档了吗?是的,我在那里看过,在问愚蠢的问题之前,你应该仔细看看。对不起,到目前为止我还是一个简单的C程序员,我有点不知所措了。这个程序可能也很有用。甚至有必要。