Spring Boot CLI

1. 安装 CLI

Spring Boot CLI(命令行界面)可以使用 SDKMAN 手动安装!(SDK 管理器)或使用 Homebrew 或 MacPorts(如果您是 OSX 用户)。 有关全面的安装说明,请参阅“入门”部分中的 getting-started.htmlspring-doc.cadn.net.cn

2. 使用 CLI

安装 CLI 后,您可以通过键入spring,然后在命令行中按 Enter 键。 如果您运行spring如果不包含任何参数,则会显示 Help 屏幕,如下所示:spring-doc.cadn.net.cn

$ spring
usage: spring [--help] [--version]
       <command> [<args>]

Available commands are:

  run [options] <files> [--] [args]
    Run a spring groovy script

  _... more command help is shown here_

您可以键入spring help获取有关任何受支持命令的更多详细信息,如以下示例所示:spring-doc.cadn.net.cn

$ spring help run
spring run - Run a spring groovy script

usage: spring run [options] <files> [--] [args]

Option                     Description
------                     -----------
--autoconfigure [Boolean]  Add autoconfigure compiler
                             transformations (default: true)
--classpath, -cp           Additional classpath entries
--no-guess-dependencies    Do not attempt to guess dependencies
--no-guess-imports         Do not attempt to guess imports
-q, --quiet                Quiet logging
-v, --verbose              Verbose logging of dependency
                             resolution
--watch                    Watch the specified file for changes

version命令提供了一种快速方法来检查你正在使用的 Spring Boot 版本,如下所示:spring-doc.cadn.net.cn

$ spring version
Spring CLI v2.7.18

2.1. 使用 CLI 运行应用程序

您可以使用run命令。 Spring Boot CLI 是完全独立的,因此您不需要任何外部 Groovy 安装。spring-doc.cadn.net.cn

以下示例显示了一个用 Groovy 编写的 “hello world” Web 应用程序:spring-doc.cadn.net.cn

hello.groovy
@RestController
class WebApplication {

    @RequestMapping("/")
    String home() {
        "Hello World!"
    }

}

要编译并运行应用程序,请键入以下命令:spring-doc.cadn.net.cn

$ spring run hello.groovy

要将命令行参数传递给应用程序,请使用 将命令与“spring”命令参数分开,如以下示例所示:--spring-doc.cadn.net.cn

$ spring run hello.groovy -- --server.port=9000

要设置 JVM 命令行参数,您可以使用JAVA_OPTS环境变量,如以下示例所示:spring-doc.cadn.net.cn

$ JAVA_OPTS=-Xmx1024m spring run hello.groovy
设置JAVA_OPTS在 Microsoft Windows 上,请确保引用整个说明,例如set "JAVA_OPTS=-Xms256m -Xmx2048m". 这样做可确保将值正确传递给进程。

2.1.1. 推导的 “grab” 依赖项

标准 Groovy 包括一个@Grabannotation 的 Comments,它允许您声明对第三方库的依赖关系。 这种有用的技术允许 Groovy 以与 Maven 或 Gradle 相同的方式下载 jar,但不需要您使用构建工具。spring-doc.cadn.net.cn

Spring Boot 进一步扩展了这项技术,并尝试根据你的代码推断出要 “抓取” 的库。 例如,由于WebApplication显示之前使用的代码@RestController注解中,Spring Boot 会抓取“Tomcat”和“Spring MVC”。spring-doc.cadn.net.cn

以下项目用作 “抓取提示”:spring-doc.cadn.net.cn

项目 抓住

JdbcTemplate,NamedParameterJdbcTemplate,DataSourcespring-doc.cadn.net.cn

JDBC 应用程序。spring-doc.cadn.net.cn

@EnableJmsspring-doc.cadn.net.cn

JMS 应用程序。spring-doc.cadn.net.cn

@EnableCachingspring-doc.cadn.net.cn

缓存抽象。spring-doc.cadn.net.cn

@Testspring-doc.cadn.net.cn

JUnit 的spring-doc.cadn.net.cn

@EnableRabbitspring-doc.cadn.net.cn

RabbitMQ 的 RabbitMQ 中。spring-doc.cadn.net.cn

延伸Specificationspring-doc.cadn.net.cn

Spock 测试。spring-doc.cadn.net.cn

@EnableBatchProcessingspring-doc.cadn.net.cn

Spring Batch 中。spring-doc.cadn.net.cn

@MessageEndpoint @EnableIntegrationspring-doc.cadn.net.cn

Spring 集成。spring-doc.cadn.net.cn

@Controller @RestController @EnableWebMvcspring-doc.cadn.net.cn

Spring MVC + 嵌入式 Tomcat。spring-doc.cadn.net.cn

@EnableWebSecurityspring-doc.cadn.net.cn

Spring Security性。spring-doc.cadn.net.cn

@EnableTransactionManagementspring-doc.cadn.net.cn

Spring 事务管理。spring-doc.cadn.net.cn

参见 的子类CompilerAutoConfiguration在 Spring Boot CLI 源代码中,以准确了解如何应用自定义。

2.1.2. 推导的 “grab” 坐标

Spring Boot 扩展了 Groovy 的标准@Grab支持,让您指定一个不带组或版本的依赖项(例如@Grab('freemarker')). 这样做会查阅 Spring Boot 的默认依赖项元数据,以推断 artifact 的组和版本。spring-doc.cadn.net.cn

默认元数据与您使用的 CLI 版本相关联。 它仅在您迁移到新版本的 CLI 时更改,从而使您能够控制依赖项版本何时可能更改。 附录中显示了默认元数据中包含的依赖项及其版本的表格。

2.1.3. 默认 import 语句

为了帮助减小 Groovy 代码的大小,有几个import语句会自动包含在内。 请注意前面的示例是如何引用@Component,@RestController@RequestMapping而无需使用完全限定名称或import语句。spring-doc.cadn.net.cn

许多 Spring 注解在不使用import语句。 在添加导入之前,请尝试运行应用程序以查看失败的内容。

2.1.4. 自动 main 方法

与等效的 Java 应用程序不同,您不需要包含public static void main(String[] args)方法与Groovy脚本。 一个SpringApplication会自动创建,编译后的代码充当source.spring-doc.cadn.net.cn

2.1.5. 自定义依赖项管理

默认情况下,CLI 使用spring-boot-dependencies解决时@Grab依赖。 额外的依赖项管理(覆盖默认依赖项管理)可以使用@DependencyManagementBom注解。 注释的值应指定坐标 (groupId:artifactId:version) 的 Mb。spring-doc.cadn.net.cn

例如,请考虑以下声明:spring-doc.cadn.net.cn

@DependencyManagementBom("com.example.custom-bom:1.0.0")

前面的声明选取custom-bom-1.0.0.pom在 Maven 存储库中的com/example/custom-versions/1.0.0/.spring-doc.cadn.net.cn

当您指定多个 BOM 时,它们将按照您声明它们的顺序应用,如以下示例所示:spring-doc.cadn.net.cn

@DependencyManagementBom([
    "com.example.custom-bom:1.0.0",
    "com.example.another-bom:1.0.0"])

前面的示例表明,在another-bom覆盖custom-bom.spring-doc.cadn.net.cn

您可以使用@DependencyManagementBom任何您可以使用的地方@Grab. 但是,为了确保依赖项管理的排序一致,您可以使用@DependencyManagementBom在您的应用程序中最多一次。spring-doc.cadn.net.cn

2.2. 具有多个源文件的应用程序

您可以将 “shell globbing” 与接受文件输入的所有命令一起使用。 这样做允许您使用单个目录中的多个文件,如以下示例所示:spring-doc.cadn.net.cn

$ spring run *.groovy

2.3. 打包应用程序

您可以使用jar命令将应用程序打包到一个独立的可执行 JAR 文件中,如以下示例所示:spring-doc.cadn.net.cn

$ spring jar my-app.jar *.groovy

生成的 jar 包含通过编译应用程序生成的类和应用程序的所有依赖项,以便随后可以使用java -jar. jar 文件还包含来自应用程序 Classpath 的条目。 您可以使用--include--exclude. 两者都是逗号分隔的,并且都接受 “+” 和 “-” 形式的前缀,以表示它们应该从默认值中删除。 默认包括如下:spring-doc.cadn.net.cn

public/**, resources/**, static/**, templates/**, META-INF/**, *

默认排除项如下:spring-doc.cadn.net.cn

.*, repository/**, build/**, target/**, **/*.jar, **/*.groovy

类型spring help jar了解更多信息。spring-doc.cadn.net.cn

2.4. 初始化新项目

init命令允许您使用 start.spring.io 创建新项目,而无需离开 shell,如以下示例所示:spring-doc.cadn.net.cn

$ spring init --dependencies=web,data-jpa my-project
Using service at https://start.spring.io
Project extracted to '/Users/developer/example/my-project'

前面的示例创建了一个my-project目录,其中包含一个基于 Maven 的项目,该项目使用spring-boot-starter-webspring-boot-starter-data-jpa. 您可以使用--list标志,如以下示例所示:spring-doc.cadn.net.cn

$ spring init --list
=======================================
Capabilities of https://start.spring.io
=======================================

Available dependencies:
-----------------------
actuator - Actuator: Production ready features to help you monitor and manage your application
...
web - Web: Support for full-stack web development, including Tomcat and spring-webmvc
websocket - Websocket: Support for WebSocket development
ws - WS: Support for Spring Web Services

Available project types:
------------------------
gradle-build -  Gradle Config [format:build, build:gradle]
gradle-project -  Gradle Project [format:project, build:gradle]
maven-build -  Maven POM [format:build, build:maven]
maven-project -  Maven Project [format:project, build:maven] (default)

...

init命令支持许多选项。 请参阅helpoutput 了解更多详情。 例如,以下命令创建一个使用 Java 8 和war包装:spring-doc.cadn.net.cn

$ spring init --build=gradle --java-version=1.8 --dependencies=websocket --packaging=war sample-app.zip
Using service at https://start.spring.io
Content saved to 'sample-app.zip'

2.5. 使用嵌入式 shell

Spring Boot 包括 BASH 和 zsh shell 的命令行完成脚本。 如果您不使用这两个 shell 中的任何一个(也许您是 Windows 用户),则可以使用shell命令启动集成的 shell,如以下示例所示:spring-doc.cadn.net.cn

$ spring shell
Spring Boot (v2.7.18)
Hit TAB to complete. Type \'help' and hit RETURN for help, and \'exit' to quit.

在嵌入式 shell 内部,您可以直接运行其他命令:spring-doc.cadn.net.cn

$ version
Spring CLI v2.7.18

嵌入式外壳支持 ANSI 颜色输出以及tab完成。 如果需要运行本机命令,可以使用!前缀。 要退出嵌入的 shell,请按ctrl-c.spring-doc.cadn.net.cn

2.6. 向 CLI 添加扩展

您可以使用install命令。 该命令采用格式为group:artifact:version,如以下示例所示:spring-doc.cadn.net.cn

$ spring install com.example:spring-boot-cli-extension:1.0.0.RELEASE

除了安装由您提供的坐标标识的工件外,还会安装所有工件的依赖项。spring-doc.cadn.net.cn

要卸载依赖项,请使用uninstall命令。 与install命令,它采用group:artifact:version,如以下示例所示:spring-doc.cadn.net.cn

$ spring uninstall com.example:spring-boot-cli-extension:1.0.0.RELEASE

它将卸载由您提供的坐标及其依赖项标识的构件。spring-doc.cadn.net.cn

要卸载所有其他依赖项,您可以使用--all选项,如以下示例所示:spring-doc.cadn.net.cn

$ spring uninstall --all

3. 使用 Groovy Beans DSL 开发应用程序

Spring Framework 4.0 具有对beans{}“DSL”(借鉴自 Grails),您可以使用相同的格式将 Bean 定义嵌入到 Groovy 应用程序脚本中。 这有时是包含中间件声明等外部功能的好方法,如以下示例所示:spring-doc.cadn.net.cn

@Configuration(proxyBeanMethods = false)
class Application implements CommandLineRunner {

    @Autowired
    SharedService service

    @Override
    void run(String... args) {
        println service.message
    }

}

import my.company.SharedService

beans {
    service(SharedService) {
        message = "Hello World"
    }
}

您可以将类声明与beans{}只要它们保持在顶层,就可以在同一个文件中保存,或者,如果你愿意,你可以把 bean DSL 放在一个单独的文件中。spring-doc.cadn.net.cn

4. 使用 settings.xml 配置 CLI

Spring Boot CLI 使用 Maven 的依赖项解析引擎 Maven Resolver 来解析依赖项。 CLI 使用 Maven 配置,位于~/.m2/settings.xml配置 Maven 解析程序。 CLI 支持以下配置设置:spring-doc.cadn.net.cn

5. 接下来要读什么

GitHub 存储库中提供了一些示例 groovy 脚本,您可以使用它们来试用 Spring Boot CLI。 整个源代码中还有大量的 Javadoc。spring-doc.cadn.net.cn

如果您发现达到了 CLI 工具的限制,您可能希望考虑将应用程序转换为完整的 Gradle 或 Maven 构建的“Groovy 项目”。 下一节介绍 Spring Boot 的“构建工具插件”,您可以将其与 Gradle 或 Maven 一起使用。spring-doc.cadn.net.cn