領先一步
VMware 提供培訓和認證,以加速您的進度。
了解更多我很高興代表團隊和所有貢獻者宣布 Spring Shell 2.1.0
已經發布,現在可以從 https://repo.spring.io/milestone 取得。
請參閱發布說明以取得更多詳細資訊。
感謝所有回報問題和提出 pull request 的貢獻者。
今年稍早,我們開始努力使該專案與最新的 Spring Boot
和 Spring Framework
版本保持一致,因為很難使用現有的 Spring Shell 版本。
最初,我們想要解決的主要問題是移除 bean 循環,Spring Boot
現在預設強制執行。 雖然可以關閉此功能,但 Spring Shell 不應要求這樣做。 這需要大量的變更,因此我們選擇重新設計 shell 內部結構來處理它。 其中一個很大的挑戰是舊的 Spring Shell
如何運作,它基本上是將命令資訊方法儲存在 @ShellMethod
注釋中,然後使用不太明確的方式通過反射呼叫這些方法。
既然我們清楚需要進行更大的改進,現在進行進一步的開發比等待 Spring Boot 3
和 Spring Framework 6
更有意義,因為 Spring Shell
最終需要支援它們。
以下是已完成的變更摘要
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
中使用的樣板並修改預設行為。 這些樣板也整合到主題框架中,因此可以為每個活動主題定義樣板。