一旦安装好CLI,你可以输入spring
来运行它。如果不使用任何参数运行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
你可以使用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
-e, --edit Open the file with the default system
editor
--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 v1.4.1.RELEASE
你可以使用run
命令编译和运行Groovy源代码。Spring Boot CLI完全自包含,以致于你不需要安装任何外部的Groovy。
下面是一个使用Groovy编写的"hello world" web应用:
hello.grooy
@RestController
class WebApplication {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
编译和运行应用可以输入:
$ spring run hello.groovy
你可以使用--
将命令行参数和"spring"命令参数区分开来,例如:
$ spring run hello.groovy -- --server.port=9000
你可以使用JAVA_OPTS
环境变量设置JVM命令行参数,例如:
$ JAVA_OPTS=-Xmx1024m spring run hello.groovy
标准的Groovy包含一个@Grab
注解,它允许你声明对第三方库的依赖。这项有用的技术允许Groovy以和Maven或Gradle相同的方式下载jars,但不需要使用构建工具。
Spring Boot进一步延伸了该技术,它会基于你的代码尝试推导你"grab"哪个库。例如,由于WebApplication
代码上使用了@RestController
注解,"Tomcat"和"Spring MVC"将被获取(grabbed)。
下面items被用作"grab hints":
items | Grabs |
---|---|
JdbcTemplate ,NamedParameterJdbcTemplate ,DataSource |
JDBC应用 |
@EnableJms |
JMS应用 |
@EnableCaching |
缓存抽象 |
@Test |
JUnit |
@EnableRabbit |
RabbitMQ |
@EnableReactor |
项目重构 |
extends Specification |
Spock test |
@EnableBatchProcessing |
Spring Batch |
@MessageEndpoint ,@EnableIntegrationPatterns |
Spring集成 |
@EnableDeviceResolver |
Spring Mobile |
@Controller ,@RestController ,@EnableWebMvc |
Spring MVC + 内嵌Tomcat |
@EnableWebSecurity |
Spring Security |
@EnableTransactionManagement |
Spring Transaction Management |
注 想要理解自定义是如何生效的,可以查看Spring Boot CLI源码中的CompilerAutoConfiguration子类。
Spring Boot扩展了Groovy标准@Grab
注解,使其能够允许你指定一个没有group
或version
的依赖,例如@Grab('freemarker')
。Spring Boot使用默认依赖元数据推断artifact’s的group和version,需要注意的是默认元数据和你使用的CLI版本有绑定关系-只有在迁移到新版本的CLI时它才会改变,这样你就可以控制何时改变依赖了,在附录的表格中可以查看默认元数据包含的依赖和它们的版本。
为了帮助你减少Groovy代码量,一些import
语句被自动包含进来了。注意上面的示例中引用@Component
,@RestController
和@RequestMapping
而没有使用全限定名或import
语句。
注:很多Spring注解在不使用import
语句的情况下可以正常工作。尝试运行你的应用,看一下在添加imports之前哪些会失败。
跟等效的Java应用不同,你不需要在Groovy脚本中添加一个public static void main(String[] args)
方法。Spring Boot会使用你编译后的代码自动创建一个SpringApplication
。
默认情况下,CLI使用在解析@Grab
依赖时spring-boot-dependencies
声明的依赖管理,其他的依赖管理会覆盖默认的依赖管理,并可以通过@DependencyManagementBom
注解进行配置。该注解的值必须是一个或多个Maven BOMs的候选(groupId:artifactId:version
)。
例如,以下声明:
@DependencyManagementBom("com.example.custom-bom:1.0.0")
将选择Maven仓库中com/example/custom-versions/1.0.0/
下的custom-bom-1.0.0.pom
。
当指定多个BOMs时,它们会以声明次序进行应用,例如:
@DependencyManagementBom(["com.example.custom-bom:1.0.0",
"com.example.another-bom:1.0.0"])
意味着another-bom
的依赖将覆盖custom-bom
依赖。
能够使用@Grab
的地方,你同样可以使用@DependencyManagementBom
。然而,为了确保依赖管理的一致次序,你在应用中至多使用一次@DependencyManagementBom
。Spring IO Platform是一个非常有用的依赖元数据源(Spring Boot的超集),例如:
@DependencyManagementBom('io.spring.platform:platform-bom:1.1.2.RELEASE')
。
test
命令允许你编译和运行应用程序的测试用例,常规使用方式如下:
$ spring test app.groovy tests.groovy
Total: 1, Success: 1, : Failures: 0
Passed? true
在这个示例中,test.groovy
包含JUnit @Test
方法或Spock Specification
类。所有的普通框架注解和静态方法在不使用import
导入的情况下,仍旧可以使用。
下面是我们使用的test.groovy
文件(含有一个JUnit测试):
class ApplicationTests {
@Test
void homeSaysHello() {
assertEquals("Hello World!", new WebApplication().home())
}
}
注 如果有多个测试源文件,你可能倾向于将它们放到test
目录下。
你可以在所有接收文件输入的命令中使用shell通配符。这允许你轻松处理来自一个目录下的多个文件,例如:
$ spring run *.groovy
如果想将test
或spec
代码从主应用代码中分离,这项技术就十分有用了:
$ spring test app/*.groovy test/*.groovy
你可以使用jar
命令打包应用程序为一个可执行的jar文件,例如:
$ spring jar my-app.jar *.groovy
最终的jar包括编译应用产生的类和所有依赖,这样你就可以使用java -jar
来执行它了。该jar文件也包含了来自应用classpath的实体。你可以使用--include
和--exclude
添加明确的路径(两者都是用逗号分割,同样都接收值为'+'和'-'的前缀,'-'意味着它们将从默认设置中移除),默认包含(includes):
public/**, resources/**, static/**, templates/**, META-INF/**, *
默认排除(excludes):
.*, repository/**, build/**, target/**, **/*.jar, **/*.groovy
查看spring help jar
可以获得更多信息。
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
输出可以获得更多详情。例如,下面的命令创建一个使用Java8和打包为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'
Spring Boot包括完整的BASH和zsh shells的命令行脚本,如果这两种你都不使用(可能你是一个Window用户),那你可以使用shell
命令启用一个集成shell。
$ spring shell
Spring Boot (v1.4.1.RELEASE)
Hit TAB to complete. Type \'help' and hit RETURN for help, and \'exit' to quit.
从内嵌shell中可以直接运行其他命令:
$ version
Spring CLI v1.4.1.RELEASE
内嵌shell支持ANSI彩色输出和tab补全,如果需要运行一个原生命令,你可以使用!
前缀,点击ctrl-c
将退出内嵌shell。
使用install
命令可以为CLI添加扩展,该命令接收一个或多个格式为group:artifact:version
的artifact坐标集,例如:
$ spring install com.example:spring-boot-cli-extension:1.0.0.RELEASE
除安装你提供坐标的artifacts标识外,该artifacts的所有依赖也会被安装。
使用uninstall
可以卸载一个依赖,和install
命令一样,它也接收一个或多个格式为group:artifact:version
的artifact坐标集,例如:
$ spring uninstall com.example:spring-boot-cli-extension:1.0.0.RELEASE
它会通过你提供的坐标卸载相应的artifacts标识及它们的依赖。
为了卸载所有附加依赖,你可以使用--all
选项,例如:
$ spring uninstall --all