Spring Shell 2.1.0 現已推出

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

我很高興代表團隊和所有貢獻者宣布 Spring Shell 2.1.0 已經發布,現在可以從 https://repo.spring.io/milestone 取得。

請參閱發布說明以取得更多詳細資訊。

感謝所有回報問題和提出 pull request 的貢獻者。

今年稍早,我們開始努力使該專案與最新的 Spring BootSpring Framework 版本保持一致,因為很難使用現有的 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 社群中所有即將到來的活動。

查看全部