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 命令行工具的更多相关文章

  1. windows下的命令行工具babun

    什么是babun babun是windows上的一个第三方shell,在这个shell上面你可以使用几乎所有linux,unix上面的命令,他几乎可以取代windows的shell.用官方的题目说就是 ...

  2. 『.NET Core CLI工具文档』(一).NET Core 命令行工具(CLI)

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:.NET Core Command Line Tools 翻译:.NET Core命令行工具 什么是 .NET Core ...

  3. 命令行工具aspnet_regiis.exe实现加密和解密web.config

    命令行工具aspnet_regiis.exe,是一个类似于DOS的命令工具,称之为命令解释器.使用命令行工具加密和解密web.config文件中的数据库连接字符串时,只需要简单的语法命令即可. 加密语 ...

  4. nodejs 编写(添加时间戳)命令行工具 timestamp

    Nodejs除了编写服务器端程序还可以编写命令行工具,如gulp.js就是Nodejs编写的. 接下来我们来实现一个添加时间戳的命令: $ timestamp action https://www.n ...

  5. 如何用Node编写命令行工具

    0. 命令行工具 当全局安装模块之后,我们可以在控制台下执行指定的命令来运行操作,如果npm一样.我把这样的模块称之为命令行工具模块(如理解有偏颇,欢迎指正) 1.用Node编写命令行工具 在Node ...

  6. Orchard中的命令行工具

    在Orchard中提供了一个命令行工具,我们可以使用这个命令行工具创建用户.创建博客.生成代码.配置网站.打包模块等.并且这个命令行工具是可以扩充的,只要我们在自己开发的模块中创建一个Command类 ...

  7. Linux 性能监控之命令行工具

    引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...

  8. 命令行工具解析Crash文件,dSYM文件进行符号化

    备份   文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序 在日常开发 ...

  9. MySQL 命令行工具之 mysqldump 深入研究

    mysqldump 是MySQL的一个命令行工具,用于逻辑备份.可以将数据库和表的结构,以及表中的数据分别导出成:create database, create table, insert into的 ...

随机推荐

  1. FIT文件CRC校验

    校验FIT文件CRC代码做个记录,分为两步先校验头部然后再校验整个FIT文件.校验头部不是必需的看个人需要吧.为了偷懒使用Okio库,还有计算CRC的时候用的Garmin的FitSDK. public ...

  2. Mysql高手系列 - 第18篇:mysql流程控制语句详解(高手进阶)

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 这是Mysql系列第18篇. 环境:mysql5.7.25,cmd命令中进行演示. 代码中被[]包含的表示可选,|符 ...

  3. 针对永久不过期的key 批量设置过期时间

    问题需求: redis内存暴增,后来发现有很多设置永久不过期. 解决:查找出来之后针对前缀批量设置过期时间 (过期时间与开发沟通 保证服务不受影响) 来源于网上杨一的代码 正好解决了我遇到的问题 在这 ...

  4. MySQL 深入理解索引B+树存储 (转载))

    出处:http://blog.codinglabs.org/articles/theory-of-mysql-index.html   摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一 ...

  5. git checkout 提示 “error: The following untracked working tree files would be overwritten by checkout” 解决

    问题描述 Windows 或者 macOS 操作系统中,文件名是不区分大小写的.对于已经提交到仓库中的文件修改文件名的大小写,然后又用 git rm 命令将老文件从 Git 仓库删除掉,并保存下新的文 ...

  6. reduce方法应用技巧

    定义和用法 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值. 注意: reduce() 对于空数组是不会执行回调函数的. 浏览器支持 方法 Chro ...

  7. Git学习记录-基本命令篇

    目录 网页在线练习地址 https://learngitbranching.js.org/ 1.git commit Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然 ...

  8. 【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

    前言 本人是一家互联网公司的java开发,由于公司初期公司未招运维人员,恰好我对linux比较熟悉,便在公司服务器搭建了一套Jenkins.Gitlab.Maven私服.Docker私服.Sonarq ...

  9. 《深入理解Java虚拟机》-----第9章 类加载及执行子系统的案例与实战

    概述 在Class文件格式与执行引擎这部分中,用户的程序能直接影响的内容并不太多, Class文件以何种格式存储,类型何时加载.如何连接,以及虚拟机如何执行字节码指令等都是由虚拟机直接控制的行为,用户 ...

  10. feof() 函数判断不准确的问题

    大家在读文件时应该碰到过这样的问题,while(!feof(fp)) 函数在读文件时会多循环一次,导致 fscanf() 函数多读了一次文件. 所以也就在输出的时候会产生一些乱码. 可以看看下面的代码 ...