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 社群中所有即將舉行的活動。

檢視全部