Spring Boot CLI是一个命令行工具,如果您想快速开发Spring应用程序,可以使用它. 它使您可以运行Groovy脚本,这意味着您具有类似Java的熟悉语法,而没有太多样板代码. 您还可以引导一个新项目或为其编写自己的命令.
1. 安装 CLI
可以使用SDKMAN手动安装Spring Boot CLI(命令行界面) (SDK Manager) 或使用Homebrew或MacPorts(如果您是OSX用户) . 有关全面的安装说明,请参见 “Getting started” 部分中的 getting-started.html .
2. 使用 CLI
安装CLI后,可以通过输入 spring
并在命令行中按Enter来运行它. 如果您不带任何参数运行 spring
,则会显示一个简单的帮助屏幕,如下所示:
$ 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 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 version Spring CLI v2.2.5.RELEASE
2.1. 使用 CLI 运行应用程序
您可以使用 run
命令来编译和运行Groovy源代码. Spring Boot CLI是完全独立的,因此您不需要任何外部Groovy安装.
以下示例显示了用Groovy编写的 “hello world” Web应用程序:
@RestController
class WebApplication {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
要编译并运行该应用程序,请输入以下命令
$ spring run hello.groovy
要将命令行参数传递给应用程序,请使用 --
将命令与 “spring” 命令参数分开,如以下示例所示:
$ spring run hello.groovy -- --server.port=9000
要设置JVM命令行参数,可以使用 JAVA_OPTS
环境变量,如以下示例所示:
$ JAVA_OPTS=-Xmx1024m spring run hello.groovy
在 Microsoft Windows上设置 JAVA_OPTS 时,请确保引用整个指令,例如 set "JAVA_OPTS=-Xms256m -Xmx2048m" . 这样做可以确保将值正确传递给流程.
|
2.1.1. 推测 “grab” 依赖
标准Groovy包含一个 @Grab
注解,它使您可以声明对第三方库的依赖关系. Groovy可以使用这种有用的技术以与Maven或Gradle相同的方式下载jar,而无需使用构建工具.
Spring Boot进一步扩展了该技术,并尝试根据您的代码推断出哪些库可以"`grab`" . 例如,由于先前显示的 WebApplication
代码使用 @RestController
注解,因此Spring Boot会获取 "Tomcat" 和 "Spring MVC".
以下各项用作 “grab hints”:
Items | Grabs |
---|---|
|
JDBC 应用程序. |
|
JMS Application. |
|
Caching 抽象. |
|
JUnit. |
|
RabbitMQ. |
extends |
Spock 测试. |
|
Spring 批处理. |
|
Spring 集成. |
|
Spring MVC + 嵌入式 Tomcat. |
|
Spring Security. |
|
Spring 事务管理. |
请参阅Spring Boot CLI源代码中的 CompilerAutoConfiguration 的子类,以确切地了解如何应用定制.
|
2.1.2. 推测 “grab” 坐标
Spring Boot通过允许您指定不带组或版本的依赖(例如, @Grab('freemarker')
) 来扩展Groovy的标准 @Grab
支持. 这样做可以参考Spring Boot的默认依赖元数据来推断工件的组和版本.
默认元数据与您使用的CLI版本相关. 仅当您移至新版本的CLI时,它才会更改,从而使您可以控制依赖的版本何时更改. 可以在 附录中找到一个表格,其中显示了默认元数据中包含的依赖关系及其版本. |
2.1.3. 默认导入语句
为了帮助减少Groovy代码的大小,将自动包含几个 import
语句. 请注意,前面的示例如何引用 @Component
, @RestController
, 和 @RequestMapping
,而无需使用完全限定的名称或 import
语句.
许多Spring注解无需使用 import 语句即可工作. 在添加导入之前,请尝试运行您的应用程序以查看失败的原因.
|
2.1.4. 自动创建 Main 方法
与等效的Java应用程序不同,您不需要在Groovy脚本中包含 public static void main(String[] args)
方法. SpringApplication
是自动创建的,其中已编译的代码作为源.
2.1.5. 自定义依赖管理
默认情况下,在解决@Grab依赖时,CLI使用 spring-boot-dependencies
中声明的依赖管理. 可以使用 @DependencyManagementBom
注解 来配置其他依赖管理,这些依赖管理将覆盖默认的依赖管理.
注解的值应指定一个或多个Maven BOM的坐标 (groupId:artifactId:version
) .
例如,考虑以下声明:
@DependencyManagementBom("com.example.custom-bom:1.0.0")
前面的声明在 com/example/custom-versions/1.0.0/
下的Maven存储库中选择了 custom-bom-1.0.0.pom
.
指定多个BOM时,它们以声明它们的顺序应用,如下例所示:
@DependencyManagementBom(["com.example.custom-bom:1.0.0",
"com.example.another-bom:1.0.0"])
前面的示例表明, another-bom
中的依赖管理会覆盖 custom-Bom中
的依赖管理.
您可以在可以使用 @Grab
的任何地方使用 @DependencyManagementBom
. 但是,为了确保依赖性管理的顺序一致,您可以在应用程序中最多使用一次 @DependencyManagementBom
.
2.2. 具有多个源文件的应用程序
您可以对所有接受文件输入的命令使用 “shell globbing” . 这样可以使您从单个目录使用多个文件,如以下示例所示:
$ spring run *.groovy
2.3. 打包你的应用程序
您可以使用 jar
命令将应用程序打包到一个独立的可执行jar文件中,如以下示例所示:
$ spring jar my-app.jar *.groovy
生成的jar包含通过编译应用程序产生的类以及应用程序的所有依赖关系,以便随后可以使用 java -jar
来运行它. jar文件还包含来自应用程序的类路径的条目. 您可以使用 --include
和 --exclude
添加和删除jar的显式路径.
两者都用逗号分隔,并且都接受前缀 “+” 和 “-” 形式,以表示应将其从默认值中删除. 默认包括以下内容:
public/**, resources/**, static/**, templates/**, META-INF/**, *
默认排除项如下:
.*, repository/**, build/**, target/**, **/*.jar, **/*.groovy
在命令行上输入 spring help jar
以获取更多信息.
2.4. 初始化新项目
使用 init
命令,可以使用 start.spring.io 创建新项目,而无需离开 shell,如以下示例所示:
$ 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-web
和 spring-boot-starter-data-jpa
. 您可以使用 --list
标志列出服务的功能,如以下示例所示:
$ 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
命令支持许多选项. 请参阅 help
输出以获取更多详细信息. 例如,以下命令创建一个使用Java 8和 war
打包的Gradle项目:
$ 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命令启动集成外壳程序,如以下示例所示:
$ spring shell Spring Boot (v2.2.5.RELEASE) Hit TAB to complete. Type \'help' and hit RETURN for help, and \'exit' to quit.
在内部使用嵌入式 shell 程序,您可以直接运行其他命令:
$ version Spring CLI v2.2.5.RELEASE
嵌入式 shell 支持ANSI颜色输出以及 tab
补全. 如果需要运行本机命令,则可以使用 !
字首. 要退出嵌入式外壳,请按 ctrl-c
.
2.6. 将扩展添加到CLI
您可以使用 install
命令将扩展添加到CLI. 该命令采用格式为 group:artifact:version
的一组或多组工件坐标,如以下示例所示:
$ spring install com.example:spring-boot-cli-extension:1.0.0.RELEASE
除了安装由您提供的坐标标识的工件之外,还将安装所有工件的依赖.
要卸载依赖,请使用 uninstall
命令. 与install命令一样,它以 group:artifact:version
的格式获取一组或多组工件坐标,如以下示例所示:
$ spring uninstall com.example:spring-boot-cli-extension:1.0.0.RELEASE
它将卸载由您提供的坐标及其依赖标识的工件.
要卸载所有其他依赖,可以使用 --all
选项,如以下示例所示:
$ spring uninstall --all
3. 使用Groovy Beans DSL开发应用程序
Spring Framework 4.0对 beans{}
“DSL”(从 Grails 来) 具有本地支持,并且您可以使用相同的格式将bean定义嵌入Groovy应用程序脚本中. 有时这是包括外部功能(如中间件声明) 的好方法,如以下示例所示:
@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放在单独的文件中.
4. 使用 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的设置文档.
5. 下一步
GitHub存储库中提供了一些 示例groovy脚本,您可以使用它们来试用Spring Boot CLI. 在整个 源代码中也有大量的Javadoc.
如果发现达到了CLI工具的极限,则可能需要考虑将应用程序转换为完整的Gradle或Maven构建的 "Groovy项目". 下一部分将介绍Spring Boot的 "构建工具插件",您可以将其与Gradle或Maven一起使用.