Spring Shell 2.1.0 现已发布

发布 | Janne Valkealahti | 2022年7月25日 | ...

我谨代表团队和所有做出贡献的人,很高兴地宣布 Spring Shell 2.1.0 已发布,并可在 https://repo.spring.io/milestone 获取。

有关更多详细信息,请参阅发布说明

感谢所有通过问题报告和拉取请求做出贡献的人。

今年早些时候,我们开始努力将项目与最新的 Spring BootSpring Framework 版本保持一致,因为很难使用现有的 Spring 系列中的 Spring Shell 版本。

最初,我们想解决的主要问题是移除 Spring Boot 现在默认强制执行的 bean 循环。虽然此功能可以关闭,但 Spring Shell 不应要求它。这需要大量更改,我们选择通过重写 shell 内部机制来处理。一个主要的挑战是旧的 Spring Shell 的工作方式,它基本上通过 @ShellMethod 注解支持命令信息方法,然后通过不那么明确的方式使用反射调用这些方法。

现在很明显,我们需要进行一次更大的彻底审查,因此现在进行进一步开发比等待 Spring Shell 最终需要支持的 Spring Boot 3Spring Framework 6 更为合理。

以下是所做更改的摘要:

命令注册

CommandRegistration 是一种新的以编程方式定义命令的方式。现有的命令注解模型在后台会被翻译成这些注册。这种新的注册模型现在允许我们动态控制命令,这在旧的 shell 实现中是不可能的。

现有注解

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

主题

现代终端实现不仅仅是显示简单的文本,它们还支持不同的字体样式,并且可以与颜色一起使用。在旧的 Spring Shell 中,这些大多是硬编码的,尽管可以通过 JLine 使用 ANSI 序列向控制台写入任何内容。因此,引入一个主题系统是有意义的,该系统允许根据选定的样式对写入的文本进行样式化。图形只是现代终端支持的 Unicode 字符,它们是创建漂亮 shell UI 的基础。

sample-style-list

sample-figure-list

UI 组件

你很可能已经使用过各种命令行工具,它们不仅仅是向用户询问一些文本,然后基于此执行操作。例如,GitHub CLI 是一个很好的例子,因为它的一些命令会进入交互模式,并使用选择列表等各种技巧和其他类型的 shell 样式表单向用户索要输入。

我们在 Spring Shell 中想要实现的是创建这些可以独立使用或组合成流程的组件。

component-flow-showcase-1

Graal

Spring Framework 未来版本的一个重要课题是使用GraalVM进行原生编译。这显然对 CLI 产生了重大影响,因为当您现有的代码被转换为原生二进制文件时,那个微小的 jvm 引导超时就会消失。

通过 2.1.x 版本,我们通过实验性的Spring Native项目证明,可以创建一个Spring Shell应用程序,该应用程序在LinuxMacOSWindows上都能正常工作。

sample-version-linux

sample-version-win

sample-version-macos

Spring ShellGraalVM的官方支持将在 3.x 版本中提供。

模板

在终端中编写命令很简单,因为你本质上只需要写一些东西。然而,我们在一些内置命令(如 help)中做的事情并不总是用户想要的,或者他们可能有其他原因来修改它的外观。Spring Shell 的一些默认输出现在基于 ANTRL 项目的 ST4 的模板。

这允许用户替换 Spring Shell 中使用的模板并修改默认行为。这些模板也集成了主题框架,因此可以为每个活动主题定义模板。

你如何提供帮助?

项目主页 | GitHub | 问题 | 文档

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有