Spring Boot CLI
1. 安装 CLI
Spring Boot CLI(命令行界面)可以使用 SDK 手动安装!(SDK 管理器)或使用 Homebrew 或 MacPorts(如果您是 OSX 用户)。 有关全面的安装说明,请参阅“入门”部分中的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.7.18
2.1. 使用 CLI 运行应用程序
您可以使用run
命令。
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
设置JAVA_OPTS 在 Microsoft Windows 上,请确保引用整个说明,例如set "JAVA_OPTS=-Xms256m -Xmx2048m" .
这样做可以确保将值正确传递给进程。 |
2.1.1. 推断的“抓取”依赖关系
标准 Groovy 包括一个@Grab
注释,它允许您声明对第三方库的依赖关系。
这种有用的技术允许 Groovy 以与 Maven 或 Gradle 相同的方式下载 jar,但不需要您使用构建工具。
Spring Boot 进一步扩展了这种技术,并尝试根据您的代码推断出要“抓取”哪些库。
例如,由于WebApplication
前面显示的代码使用@RestController
注释,Spring Boot 抓取“Tomcat”和“Spring MVC”。
以下项目用作“抓取提示”:
项目 | 抓住 |
---|---|
|
JDBC 应用程序。 |
|
JMS 应用程序。 |
|
缓存抽象。 |
|
JUnit。 |
|
RabbitMQ 的 RabbitMQ 中。 |
延伸 |
斯波克测试。 |
|
春季批次。 |
|
Spring 集成。 |
|
Spring MVC + 嵌入式 Tomcat。 |
|
Spring Security。 |
|
Spring 事务管理。 |
参见 的子类CompilerAutoConfiguration 在 Spring Boot CLI 源代码中,以准确了解如何应用自定义。 |
2.1.2. 推断的“抓取”坐标
Spring Boot 扩展了 Groovy 的标准@Grab
通过允许您指定没有组或版本的依赖项(例如,@Grab('freemarker')
).
这样做会查阅 Spring Boot 的默认依赖项元数据以推断工件的组和版本。
默认元数据与您使用的 CLI 版本相关联。 它仅在您迁移到新版本的 CLI 时才会更改,从而可以控制依赖项版本何时更改。 可以在附录中找到一个表格,显示默认元数据中包含的依赖项及其版本。 |
2.1.3. 默认导入语句
为了帮助减小 Groovy 代码的大小,可以减少以下几个import
语句会自动包含在内。
请注意前面的示例如何引用@Component
,@RestController
和@RequestMapping
无需使用完全限定的名称或import
语句。
许多 Spring 注释无需使用import 语句。
在添加导入之前,请尝试运行您的应用程序以查看失败的内容。 |
2.1.4. 自动主方法
与等效的 Java 应用程序不同,您不需要包含public static void main(String[] args)
方法与您的Groovy
脚本。
一个SpringApplication
会自动创建,编译后的代码充当source
.
2.1.5. 自定义依赖管理
默认情况下,CLI 使用spring-boot-dependencies
解析时@Grab
依赖。
其他依赖项管理(覆盖默认依赖项管理)可以通过使用@DependencyManagementBom
注解。
注释的值应指定坐标 (groupId:artifactId:version
) 的一个或多个 Maven BOM。
例如,考虑以下声明:
@DependencyManagementBom("com.example.custom-bom:1.0.0")
前面的声明将被选中custom-bom-1.0.0.pom
在Maven存储库中com/example/custom-versions/1.0.0/
.
指定多个物料清单时,将按照声明它们的顺序应用它们,如以下示例所示:
@DependencyManagementBom([
"com.example.custom-bom:1.0.0",
"com.example.another-bom:1.0.0"])
前面的示例表明another-bom
覆盖 中的依赖项管理custom-bom
.
您可以使用@DependencyManagementBom
任何您可以使用的地方@Grab
.
但是,为了确保依赖项管理的顺序一致,您可以使用@DependencyManagementBom
在应用程序中最多一次。
2.2. 具有多个源文件的应用程序
您可以将“shell globbing”用于所有接受文件输入的命令。 这样做可以让您使用单个目录中的多个文件,如以下示例所示:
$ spring run *.groovy
2.3. 打包你的应用程序
您可以使用jar
命令将应用程序打包到独立的可执行 jar 文件中,如以下示例所示:
$ spring jar my-app.jar *.groovy
生成的 jar 包含通过编译应用程序生成的类和应用程序的所有依赖项,以便可以使用java -jar
.
jar 文件还包含来自应用程序类路径的条目。
您可以使用以下命令添加和删除 jar 的显式路径--include
和--exclude
.
两者都以逗号分隔,并且都接受前缀,以“+”和“-”的形式,表示应从默认值中删除它们。
默认包含如下:
public/**, resources/**, static/**, templates/**, META-INF/**, *
默认排除项如下:
.*, repository/**, build/**, target/**, **/*.jar, **/*.groovy
类型spring help jar
在命令行上了解更多信息。
2.4. 初始化新项目
这init
命令允许您在不离开 shell 的情况下使用 start.spring.io 创建新项目,如以下示例所示:
$ 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
包装:
$ 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 shell
Spring Boot (v2.7.18)
Hit TAB to complete. Type \'help' and hit RETURN for help, and \'exit' to quit.
在嵌入式 shell 中,您可以直接运行其他命令:
$ version
Spring CLI v2.7.18
嵌入式外壳支持 ANSI 颜色输出以及tab
完成。
如果您需要运行本机命令,您可以使用!
前缀。
要退出嵌入的 shell,请按ctrl-c
.
2.6. 向 CLI 添加扩展
您可以使用install
命令。
该命令采用格式为“的一组或多组工件坐标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),您可以使用相同的格式在 Groovy 应用程序脚本中嵌入 bean 定义。
这有时是包含中间件声明等外部功能的好方法,如以下示例所示:
@Configuration(proxyBeanMethods = false)
class Application implements CommandLineRunner {
@Autowired
SharedService service
@Override
void run(String... args) {
println service.message
}
}
beans {
service(SharedService) {
message = "Hello World"
}
}
您可以将类声明与beans{}
在同一文件中,只要它们保持在顶层,或者,如果您愿意,您可以将 Bean DSL 放在一个单独的文件中。
4. 使用 settings.xml 配置 CLI
Spring Boot CLI 使用 Maven Resolver(Maven 的依赖解析引擎)来解析依赖关系。
CLI 使用 Maven 配置~/.m2/settings.xml
以配置 Maven Resolver。
CLI 遵循以下配置设置:
-
离线
-
镜子
-
服务器
-
代理
-
配置 文件
-
激活
-
存储 库
-
-
活动配置文件
有关更多信息,请参阅 Maven 的设置文档。
5. 接下来要读什么
GitHub 存储库中提供了一些示例 groovy 脚本,您可以使用它们来试用 Spring Boot CLI。 整个源代码中还有大量的 Javadoc。
如果您发现已达到 CLI 工具的极限,您可能需要考虑将应用程序转换为完整的 Gradle 或 Maven 构建的“Groovy 项目”。 下一节介绍 Spring Boot 的“构建工具插件”,您可以将其与 Gradle 或 Maven 一起使用。