Spring Boot CLI 是一个命令行工具,如果您想快速开发 Spring 应用程序,可以使用它。它使您可以运行 Groovy 脚本,这意味着您具有类似 Java 的熟悉语法,而没有太多样板代码。您还可以引导一个新项目或为其编写自己的命令。
安装CLI
可以使用 SDKMAN 手动安装 Spring Boot CLI(命令行界面)! (SDK Manager)或使用 Homebrew 或 MacPorts(如果您是 OSX 用户)。有关全面的安装说明,请参阅“Starter”部分中的 第 10.2 节“安装 Spring Boot CLI” 。
使用CLI
安装 CLI 后,可以通过键入spring
并在命令行中按 Enter 来运行它。如果您不带任何参数运行spring
,则会显示一个简单的帮助屏幕,如下所示:
1 | spring |
您可以键入spring help
以获取有关任何受支持命令的更多详细信息,如以下示例所示:
1 | spring help run |
version
命令提供了一种快速的方法来检查您正在使用的 Spring Boot 版本,如下所示:
1 | spring version |
使用CLI运行应用程序
您可以使用run
命令来编译和运行 Groovy 源代码。 Spring Boot CLI 是完全独立的,因此您不需要任何外部 Groovy 安装。
以下示例显示了用 Groovy 编写的“ hello world” Web 应用程序:
hello.groovy.
1 |
|
要编译并运行该应用程序,请键入以下命令:
1 | $ spring run hello.groovy |
要将命令行参数传递给应用程序,请使用--
将命令与“ spring”命令参数分开,如以下示例所示:
1 | $ spring run hello.groovy -- --server.port=9000 |
要设置 JVM 命令行参数,可以使用JAVA_OPTS
环境变量,如以下示例所示:
1 | $ JAVA_OPTS=-Xmx1024m spring run hello.groovy |
Note
在 Microsoft Windows 上设置
JAVA_OPTS
时,请确保引用整个指令,例如set "JAVA_OPTS=-Xms256m -Xmx2048m"
。这样做可以确保将值正确传递给流程。
推论”grab”依赖性
标准 Groovy 包含@Grab
注解,该注解使您可以声明对第三方库的依赖关系。 Groovy 可以使用这种有用的技术以与 Maven 或 Gradle 相同的方式下载 jar,而无需使用构建工具。
Spring Boot 进一步扩展了该技术,并尝试根据您的代码推断出哪些库可以“抢”。例如,由于先前显示的WebApplication
代码使用@RestController
注解,因此 Spring Boot 会捕获“ Tomcat”和“ Spring MVC”。
以下各项用作“抓取提示”:
Items | Grabs |
---|---|
JdbcTemplate , NamedParameterJdbcTemplate , DataSource |
JDBC Application. |
@EnableJms |
JMS Application. |
@EnableCaching |
Caching abstraction. |
@Test |
JUnit. |
@EnableRabbit |
RabbitMQ. |
延伸Specification |
Spock test. |
@EnableBatchProcessing |
Spring Batch. |
@MessageEndpoint @EnableIntegration |
Spring Integration. |
@Controller @RestController @EnableWebMvc |
Spring MVC 嵌入式 Tomcat。 |
@EnableWebSecurity |
Spring Security. |
@EnableTransactionManagement |
SpringTransactionManagement。 |
Tip
请参阅 Spring Boot CLI 源代码中的CompilerAutoConfiguration的子类,以确切地了解如何应用定制。
推导”grab”坐标
Spring Boot 通过允许您指定不带组或版本的依赖项(例如@Grab('freemarker')
)来扩展 Groovy 的标准@Grab
支持。这样做可以参考 Spring Boot 的默认依赖元数据来推断工件的组和版本。
Note
默认元数据与您使用的 CLI 版本相关。仅当您移至新版本的 CLI 时,它才会更改,从而使您可以控制依赖项的版本何时更改。可以在appendix中找到一个表格,其中显示了默认元数据中包含的依赖项及其版本。
默认导入语句
为了帮助减少 Groovy 代码的大小,将自动包含多个import
语句。注意,前面的示例如何引用@Component
,@RestController
和@RequestMapping
,而无需使用完全限定的名称或import
语句。
Tip
许多 Spring Comments 无需使用
import
语句即可工作。在添加导入之前,请尝试运行您的应用程序以查看失败的原因。
自动Main方法
与等效的 Java 应用程序不同,您不需要在Groovy
脚本中包含public static void main(String[] args)
方法。会自动创建一个SpringApplication
,并将您的编译后代码用作source
。
自定义依赖项管理
默认情况下,CLI 使用spring-boot-dependencies
中声明的依赖性 Management 来解决@Grab
依赖性。可以使用@DependencyManagementBom
注解来配置其他依赖项 Management,这些依赖项 Management 将覆盖默认的依赖项 Management。Comments 的值应指定一个或多个 Maven BOM 的坐标(groupId:artifactId:version
)。
例如,考虑以下声明:
1 | "com.example.custom-bom:1.0.0") ( |
前面的声明在com/example/custom-versions/1.0.0/
下的 Maven 存储库中选取custom-bom-1.0.0.pom
。
当您指定多个 BOM 时,它们以声明它们的 Sequences 应用,如以下示例所示:
1 | "com.example.custom-bom:1.0.0", ([ |
前面的示例表明another-bom
中的依赖项 Management 覆盖custom-bom
中的依赖项 Management。
您可以在可以使用@Grab
的任何地方使用@DependencyManagementBom
。但是,为确保依赖性 Management 的 Sequences 一致,您最多可以在应用程序中使用@DependencyManagementBom
。 Spring IO 平台是依赖 Management 的有用资源(它是 Spring Boot 依赖 Management 的超集),您可以将其包括在以下行中:
1 | 'io.spring.platform:platform-bom:1.1.2.RELEASE') ( |
具有多个源文件的应用程序
您可以对所有接受文件 Importing 的命令使用“ shell globbing”。这样可以使您从单个目录使用多个文件,如以下示例所示:
1 | spring run *.groovy |
打包您的应用程序
您可以使用jar
命令将您的应用程序打包到一个独立的可执行 jar 文件中,如以下示例所示:
1 | spring jar my-app.jar *.groovy |
生成的 jar 包含通过编译应用程序产生的类以及应用程序的所有依赖关系,以便随后可以使用java -jar
来运行它。 jar 文件还包含来自应用程序的 Classpath 的条目。您可以使用--include
和--exclude
添加和删除 jar 的显式路径。两者都用逗号分隔,并且都接受形式为“”和“-”的前缀,以表示应将其从默认值中删除。默认包括以下内容:
1 | public/**, resources/**, static/**, templates/**, META-INF/**, * |
默认排除项如下:
1 | .*, repository/**, build/**, target/**, **/*.jar, **/*.groovy |
在命令行上键入spring help jar
以获取更多信息。
初始化新项目
init
命令使您可以使用start.spring.io创建新项目,而无需离开 Shell,如以下示例所示:
1 | $ spring init --dependencies=web,data-jpa my-project |
前面的示例使用spring-boot-starter-web
和spring-boot-starter-data-jpa
创建一个基于 Maven 的项目的my-project
目录。您可以使用--list
标志列出服务的功能,如以下示例所示:
1 | $ spring init --list |
init
命令支持许多选项。有关更多详细信息,请参见help
输出。例如,以下命令创建使用 Java 8 和war
打包的 Gradle 项目:
1 | $ spring init --build=gradle --java-version=1.8 --dependencies=websocket --packaging=war sample-app.zip |
使用嵌入式Shell
Spring Boot 包含用于 BASH 和 zsh Shell 的命令行完成脚本。如果您不使用这两个 Shell 程序(也许您是 Windows 用户),则可以使用shell
命令启动集成 Shell 程序,如以下示例所示:
1 | $ spring shell |
在嵌入式 Shell 程序内部,您可以直接运行其他命令:
1 | $ version |
嵌入式 Shell 支持 ANSI 颜色输出以及tab
完成。如果需要运行本机命令,则可以使用!
前缀。要退出嵌入式 Shell,请按ctrl-c
。
将扩展添加到CLI
您可以使用install
命令将扩展添加到 CLI。该命令采用group:artifact:version
格式的一组或多组工件坐标,如以下示例所示:
1 | $ spring install com.example:spring-boot-cli-extension:1.0.0.RELEASE |
除了安装由您提供的坐标标识的工件之外,还将安装所有工件的依赖项。
要卸载依赖项,请使用uninstall
命令。与install
命令一样,它采用group:artifact:version
格式的一组或多组工件坐标,如以下示例所示:
1 | $ spring uninstall com.example:spring-boot-cli-extension:1.0.0.RELEASE |
它将卸载由您提供的坐标及其依赖项标识的工件。
要卸载所有其他依赖项,可以使用--all
选项,如以下示例所示:
1 | $ spring uninstall --all |
使用GroovyBeanDSL开发应用程序
Spring Framework 4.0 对beans{}
“ DSL”(从Grails借来)具有本地支持,并且您可以使用相同的格式将 Bean 定义嵌入 Groovy 应用程序脚本中。有时,这是包括外部功能(如中间件声明)的好方法,如以下示例所示:
1 |
|
您可以将类声明与beans{}
混合在同一文件中,只要它们位于顶层即可;或者,如果愿意,可以将 bean DSL 放在单独的文件中。
使用settings.xml配置CLI
Spring Boot CLI 使用 Maven 的依赖关系解析引擎 Aether 来解决依赖关系。 CLI 利用~/.m2/settings.xml
中的 Maven 配置来配置 Aether。 CLI 遵循以下配置设置:
- Offline
- Mirrors
- Servers
- Proxies
- Profiles
- Activation
- Repositories
- Active profiles
有关更多信息,请参见Maven 的设置文档。
接下来要读什么
GitHub 存储库中有一些常规脚本示例可用于尝试 Spring Boot CLI。整个source code中也有广泛的 Javadoc。
如果发现达到了 CLI 工具的极限,则可能需要考虑将应用程序转换为完整的 Gradle 或 Maven 构建的“ Groovy 项目”。下一节将介绍 Spring Boot 的“ 构建工具插件”,您可以将其与 Gradle 或 Maven 一起使用。