转载

SpringBootCLI 命令行工具

SpringBootCLI 命令行工具

Spring Boot CLI 是用于快速开发 Spring 应用的命令行工具。用来运行 Groovy (与 Java 风格类似)脚本。

spring-cli 似乎不是可以各种diy spring-boot程序命令行参数、行为的工具,而是执行 groovy 脚本来快速达到一些效果。

版本

SpringBoot-2.2.0.RELEASE

安装

从 官网 下载 spring-cli 安装,然后将bin目录配置环境变量。安装完成可通过 spring version 查看版本。

使用

用 CLI 运行应用

新建一个文件(如:hello.groovy),内容如下:

@RestController
class ThisWillActuallyRun{
  @RequestMapping("/")
  String home(){
    "Hello World!"
  }
}复制代码

运行命令: spring run hello.groovy ,第一次下载各种依赖比较慢,之后就会直接启动了。此处示例使用默认端口启动一个web服务。通过访问 http://127.0.0.1:8080/ 获取返回数据。

也可以运行命令: spring run hello.groovy -- --server.port=9000 来指定命令行参数。注意:要使用 -- 来分隔命令和参数。

设置 JVM 命令行参数,可以用 JAVA_OPTS 环境变量,如下:

# linux
JAVA_OPTS=-Xmx1024m spring run hello.groovy复制代码
# windows
set "JAVA_OPTS=-Xms256m -Xmx2048m"复制代码

推断依赖

如:根据 @Controller 或  @RestController 或  @EnableWebMvc 推断出使用 Spring MVC + Embedded Tomcat

默认导包语句

为了简洁,许多导包语句会自动发生。

自动推导 main 方法

Groovy 脚本不像 java 应用需要包含 main 方法, SpringApplication 会自动创建,将你编译的代码作为资源执行。

自定义依赖管理

默认依赖管理声明在 spring-boot-dependencies 中,可通过 @DependencyManagementBom 配置,注解的值需要指定的值满足表达式: groupId:artifactId:version

@DependencyManagementBom("io.spring.platform:platform-bom:1.1.2.RELEASE")

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

运行多个资源文件

spring run *.groovy复制代码

打包应用

spring java my-app.jar *.groovy复制代码

生成的jar包含编译应用程序生成的类和应用程序的所有依赖项,以便可以使用java-jar运行它。jar文件还包含来自应用程序类路径的条目。可以使用 --include--exclude 添加和删除打包到jar的显式路径。默认包含的资源如下:

public/**, resources/**, static/**, templates/**, META-INF/**, *复制代码

默认排除的如下:

.*, repository/**, build/**, target/**, **/*.jar, **/*.groovy复制代码

初始化新项目

init 命令允许你不必离开shell工具而直接使用 start.spring.io 创建一个新项目,如下例所示:

# 项目名为 my-project
$ 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 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'复制代码

使用切入式 Shell

SpringBoot 包含 BASH 和 zsh shells 的命令行完整脚本。如果不需使用它们(使用windows系统),你可以用 shell 命令启动集成的shell,如下:

$ spring shell
Spring Boot (v2.2.0.RELEASE)
Hit TAB to complete. Type /'help' and hit RETURN for help, and /'exit' to quit.复制代码

使用嵌入式 shell,可以直接使用其他命令:

$ version
Spring CLI v2.2.0.RELEASE复制代码

嵌入式 shell 支持 ANSI 颜色输出和 tab 提示。如果需要运行原生命令,可以使用 ! 前缀,退出嵌入式 shell,使用 ctrl-c

添加扩展

使用 install 命令添加扩展。接受的扩展格式为: group:artifact:version ,如下:

$ spring install com.example:spring-boot-cli-extension:1.0.0.RELEASE复制代码

除了安装你需要的目标依赖,它的所有依赖项也会安装。

使用 uninstall 命令卸载依赖。使用方式与 install 一样。它卸载目标依赖,以及目标的所有依赖项。卸载所有扩展依赖,可使用:

$ spring uninstall --all复制代码

使用 Groovy Beans DSL 开发应用

spring 框架 4.0 就已经对 DSL 原生支持。在 Grooby 应用中可以用相同的格式使用bean定义。

用 settings.xml 配置 CLI

Spring Boot CLI 使用Aether(Maven的依赖项解析引擎)解析依赖项。CLI 使用~/.m2/settings.xml中的maven配置来配置Aether。CLI遵循以下配置:

  • Offline
  • Mirrors
  • Servers
  • Proxies
  • Profiles
    • Activation
    • Repositories
  • Active profiles

参考文档

SpringBoot 官方文档 公众号:逸飞兮(专注于 Java 领域知识的 深入学习 ,从源码到原理,系统有序的学习)

SpringBootCLI 命令行工具

原文  https://juejin.im/post/5dc0cae15188255fa33afa6c
正文到此结束
Loading...