最新の安定バージョンについては、Spring Shell 4.0.1 を使用してください!

ビルド

このセクションでは、Spring Shell アプリケーションを構築する方法について説明します。

スターター

  1. Spring Shell スターター

名前 説明

spring-shell-starter

基本 Spring Shell モジュール

spring-shell-starter-jansi

JLine ジャンシプロバイダー

spring-shell-starter-jni

JLine jni プロバイダーを使用

spring-shell-starter-jna

JLine jna プロバイダー

spring-shell-starter-test

Spring Shell テストサポート

ターミナルプロバイダー

プログラムが実行されている基盤となるターミナルとのやり取りは、従来、比較的複雑なプロセスでしたが、すべてがテキストだけなので、それほど多くのことは起こっていないように見えるかもしれません。

昔の手動型ライターやマトリクスプリンターを覚えていますか? 文字が出力されたら、別の位置に出力したい場合はカーソルを移動する必要があります。簡単に言えば、現在のターミナルエミュレータはまさにそのように動作します。

既存のターミナルエミュレータ環境へのアクセスと理解を深めるため、JLine は独自の共有ライブラリを介してネイティブコードを使用できます。JLine は存在するプロバイダを検出し、使用するプロバイダを選択します。従来、プロバイダは jansijnijna の 3 つで、すべて同じ機能を提供するはずでした。

当社のスターターを使用すると、これらの JLine プロバイダーのいくつかを具体的に選択できます。

ネイティブサポート

Spring Shell アプリケーションを GraalVM バイナリにコンパイルするためのサポートは、主に Spring Framework および Spring Boot から提供され、機能は AOT と呼ばれます。アヘッドオブタイムとは、コンパイル時にアプリケーションコンテキストが準備され、GraalVM 生成の準備が整うことを意味します。

フレームワーク Spring Shell からの AOT 機能上に構築する独自の GraalVM 構成があり、バイナリに何が存在すべきかのヒントを提供します。通常、問題は、GraalVM 関連の構成がまだ含まれていないか、それらの構成が不完全なサードパーティライブラリから発生します。

サードパーティのライブラリに不足しているヒントを提供する GraalVM Reachability Metadata Repository を使用する必要があります。また、GraalVM をインストールし、それを指す JAVA_HOME  が必要です。

gradle の場合、graalvm のネイティブプラグインを追加し、メタデータリポジトリを構成します。

plugins {
	id 'org.graalvm.buildtools.native' version '0.9.16'
}

graalvmNative {
	metadataRepository {
        enabled = true
	}
}

gradle ビルドが ./gradlew nativeCompile で実行されると、build/native/nativeCompile ディレクトリにバイナリを取得する必要があります。

maven の場合は spring-boot-starter-parent を親として使うと、ネイティブコンパイルに使用できる native プロファイルが生成されます。メタデータリポジトリを設定する必要があります。

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <configuration>
                    <metadataRepository>
                        <enabled>true</enabled>
                    </metadataRepository>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
spring-boot-starter-parent に依存している場合は、最新に保たれている native-maven-plugin バージョンを管理します。

maven ビルドが ./mvnw native:compile -Pnative で実行されると、target ディレクトリにバイナリを取得する必要があります。

すべてがうまくいった場合、jvm を介して Boot アプリケーション jar を実行する代わりに、このバイナリをそのまま実行できます。