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 Boot 3Spring Framework 6 更合理,Spring Shell 最终需要支持这两个版本。

以下是所做更改的摘要

命令注册

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 Shell 中对GraalVM 的正式支持将随 3.x 一起提供。

模板

将命令写入终端很容易,因为您基本上只需编写一些内容。但是,我们在某些内置命令(如 help)中所做的事情并不总是用户想要的,或者他们可能有其他理由修改其外观。Spring Shell 的一些默认输出现在基于来自 ANTRL 项目的 ST4 的模板。

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

您如何提供帮助?

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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以加快您的进步。

了解更多

获得支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部