Spring Shell 2.1 发布,基于 Spring 的交互式 shell

Spring Shell 2.1.x 完全依赖于 Spring Boot 2.x,并不试图与旧的 Spring Shell 1.x 或 Spring Boot 1.x 保持任何向后兼容。

Spring Shell 2.1 发布,更新内容如下:

Command Registration

CommandRegistration 是一种定义命令的新编程方式。现有的命令注解模型可以转化为场景背后的这些注册。这个新的注册模型现在允许我们动态地控制命令,这在旧的 shell 实现中是不可能的。

现有注解

对于 @ShellMethod@ShellOption,我们试图保持它们的兼容性,未来的发展很可能会引入新的注解,与 CommandRegistration 更加一致。

主题化

现代终端的实现并不局限于显示一个简单的文本,而是允许不同类型的字体样式,并且可以使用颜色。在旧的 Spring Shell 中,这些大多是硬编码的,同时可以通过 JLine 使用 ANSI 序列将任何东西写进控制台。引入一个主题系统是有意义的,在这个系统中,所写的文本可以被样式化,这是创建漂亮的 shell UI 的基础。

https://user-images.githubusercontent.com/50398/180449734-4186d36a-462e-4798-b9db-444aa4c5cb7e.gif

https://user-images.githubusercontent.com/50398/180449857-2bcc06ac-1705-4934-8485-7f78bf7a6f76.gif

UI 组件

你很可能使用过各种 CLI 工具,这些工具不仅仅是向用户询问一些文本,然后在此基础上做一些事情。例如,GitHub CLI 就是一个很好的例子,它的一些命令会进入交互模式,并使用各种技巧要求用户输入,如选择器列表和其他类型的 shell

我们想在 Spring Shell 中完成的是创建这些组件,它们可以独立使用,也可以将这些组件组合成一个流程。

https://user-images.githubusercontent.com/50398/180447680-8fa40f23-9ce6-4cd2-87b2-22c8ee09256f.svg

Graal

在未来的 Spring Framework 版本中,一个重要的话题是用 GraalVM 进行本地编译。这显然对 CLI 有很大的影响,因为当你的现有代码被翻译成本地二进制时,那个小小的 jvm bootstrap 超时就会消失。

在 2.1.x 版本中,我们用实验性的 Spring Native 项目证明了可以创建一个在 Linux、macOS 和 Windows 中以同样方式工作的 Spring Shell 应用程序。

https://user-images.githubusercontent.com/50398/180446288-a1c3ed95-b20c-4cdb-924f-ab283c514e24.gif

https://user-images.githubusercontent.com/50398/180446731-9e08dc96-cfe1-4ca5-a978-2783c1cb4a52.gif

https://user-images.githubusercontent.com/50398/180483578-89f0da8d-2773-46b8-aef8-70d1176a7f49.png

Spring Shell 对 GraalVM 的正式支持将在 3.x 版本中推出。

模板化

现在 Spring Shell 的一些默认输出是基于 ANTRL 项目的 ST4 的模板。这使得用户可以替换 Spring Shell 中使用的模板并修改默认行为。这些模板也集成到了主题框架中,这样就有可能为每个活动主题定义模板。

修复

本 GA 包含一些显着的变化:

  • 基于 Spring Boot 2.7.2 构建
  • 一些样式变化
  • Help 命令现在知道别名
  • MultiItemSelector 组件现在可以默认选择项目
  • @ShellOption 的一些修复
  • 修复 using-shell-options-optional.adoc 中的拼写错误

更多详情可查看:https://github.com/spring-projects/spring-shell/releases/tag/v2.1.0

猜你喜欢

转载自www.oschina.net/news/204425/spring-shell-2-1-released