搶佔先機
VMware 提供培訓和認證,助您加速進步。
瞭解更多我代表團隊和所有貢獻者,很高興宣佈 Spring Shell 2.1.0
已經發布,現可從 https://repo.spring.io/milestone 獲取。
請檢視 釋出說明 瞭解更多詳情。
感謝所有透過問題報告和拉取請求做出貢獻的人。
今年早些時候,我們開始努力將專案與最新的 Spring Boot
和 Spring Framework
版本對齊,因為使用現有的 Spring 系列 Spring Shell
版本很困難。
最初我們想要解決的主要問題是移除 bean 迴圈,Spring Boot
現在預設強制執行這一點。雖然此功能可以關閉,但這並不是 Spring Shell 應該要求的。這需要大量的更改,我們選擇透過重寫 shell 內部來實現。一個巨大的挑戰是舊版本 Spring Shell
的工作方式,它基本上透過由 @ShellMethod
註解支援來維護命令資訊方法,然後以不太明確的方式透過反射呼叫這些方法。
既然清楚需要進行更大範圍的全面修訂,那麼現在進行進一步開發比等待 Spring Shell
最終需要支援的 Spring Boot 3
和 Spring Framework 6
更有意義。
以下是對已完成更改的回顧
CommandRegistration
是一種新的以程式設計方式定義命令的方法。現有的命令註解模型在幕後會轉換為這些註冊。這種新的註冊模型現在允許我們動態控制命令,這在舊的 shell 實現中是不可能的。
關於 @ShellMethod
和 @ShellOption
,我們已努力保持其相容性,未來開發很可能會引入更多與 CommandRegistration
對齊的新註解。
現代終端實現不僅限於顯示簡單文字,還允許使用不同的字型樣式並可以使用顏色。在舊版本的 Spring Shell
中,這些大部分是硬編碼的,雖然可以透過 JLine
使用 ANSI 序列將任何內容寫入控制檯。引入一個主題系統是有意義的,在該系統中,可以對寫入的文字進行樣式設定,並根據樣式選擇圖形。圖形只是現代終端支援的 unicode 字元,這是建立漂亮的 shell UI 的基礎。
你很可能使用過各種 CLI 工具,它們不僅僅是向用戶詢問一些文字然後基於此進行操作。例如,GitHub CLI 就是一個很好的例子,因為它的一些命令會進入互動模式,並使用各種技巧(如選擇器列表和其他 shell 樣式表單)向用戶請求輸入。
我們在 Spring Shell
中想要實現的是建立這些元件,它們可以獨立使用或組合成一個流程。
在未來的 Spring Framework 版本中,使用 GraalVM 進行原生編譯是一個重要議題。當您現有程式碼被翻譯成原生二進位制檔案時,這顯然會對 CLI 側產生重大影響,因為那個微小的 jvm 引導超時會消失。
使用 2.1.x
版本,我們透過實驗性的 Spring Native 專案表明,可以建立一個在 Linux、MacOS 和 Windows 中以相同方式工作的 Spring Shell 應用程式。
Spring Shell 對 GraalVM 的官方支援將在 3.x
版本中提供。
在終端中編寫命令非常容易,您只需輸入一些內容。然而,我們在某些內建命令(例如 help
)中所做的並不總是使用者想要的,或者他們可能有其他原因來修改其外觀。Spring Shell
中的一些預設輸出現在基於 ANTRL
專案的 ST4 模板。
這允許使用者替換 Spring Shell
中使用的模板並修改預設行為。這些模板還整合到主題框架中,因此可以為每個活動主題定義模板。