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 版本很困难。

最初我们想要解决的主要问题是移除 bean 循环,Spring Boot 现在默认强制执行这一点。虽然此功能可以关闭,但这并不是 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 组件

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

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

component-flow-showcase-1

Graal

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

使用 2.1.x 版本,我们通过实验性的 Spring Native 项目表明,可以创建一个在 LinuxMacOSWindows 中以相同方式工作的 Spring Shell 应用程序。

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 社区中所有即将举行的活动。

查看全部