事前処理
Spring AOT は、ビルド時にアプリケーションを分析し、最適化されたバージョンを生成するプロセスです。ネイティブイメージで Spring ApplicationContext を実行することは必須の手順です。
| Spring Boot での GraalVM ネイティブイメージサポートの概要については、リファレンスドキュメントを確認してください。 |
Spring Boot Maven プラグインは、アプリケーションとテストコードの両方で AOT 処理を実行するために使用できるゴールを提供します。
アプリケーションの処理
この機能を使用するようにアプリケーションを構成するには、次の例に示すように、process-aot ゴールの実行を追加します。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>process-aot</id>
<goals>
<goal>process-aot</goal>
</goals>
</execution>
</executions>
</plugin>BeanFactory はビルド時に完全に準備されるため、条件も評価されます。これは、実行時に通常の Spring Boot アプリケーションが行うことと比べて重要な違いがあります。たとえば、特定の機能をオプトインまたはオプトアウトする場合は、ビルド時に使用する環境を構成する必要があります。そのため、process-aot ゴールは多くのプロパティを run ゴールと共有します。
ネイティブプロファイルの使用
プロジェクトの parent として spring-boot-starter-parent を使用する場合、native プロファイルを使用して、ネイティブイメージのビルドに必要な手順を合理化できます。
native プロファイルは、以下を構成します。
Spring Boot Maven プラグインがプロジェクトに適用されている場合の
process-aotの実行。build-image がネイティブイメージを生成するための適切な設定。
特にネイティブビルドツール Maven プラグイン (英語) の適切なデフォルト:
再パッケージ化された jar 形式を認識しないため、プラグインがメインの jar ファイルではなく生のクラスパスを使用していることを確認します。
適切な GraalVM バージョンが利用可能であることを検証します。
サードパーティの到達可能性メタデータをダウンロードします。
生のクラスパスを使用すると、ネイティブイメージは生成された |
native プロファイルを活用するには、次の例に示すように、アプリケーションを表すモジュールで 2 つのプラグインを定義する必要があります。
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>単一のプロジェクトは、コマンドラインで Cloud Native Buildpacks またはネイティブイメージビルドツールを使用してネイティブイメージの生成をトリガーできます。
マルチモジュールプロジェクトで native プロファイルを使用するには、native プロファイルのカスタマイズを作成して、推奨する手法を呼び出すことができます。
package フェーズで Cloud Native Buildpacks をバインドするには、マルチモジュールプロジェクトのルート POM に次を追加します。
<profile>
<id>native</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>build-image</id>
<goals>
<goal>build-image-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>以下の例は、ネイティブビルドツールに対して同じことを行います。
<profile>
<id>native</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<executions>
<execution>
<id>build-image</id>
<goals>
<goal>compile-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>上記が整ったら、次の例に示すように、マルチモジュールプロジェクトをビルドし、関連するサブモジュールでネイティブイメージを生成できます。
$ mvn package -Pnative| 「関連する」サブモジュールは、Spring Boot アプリケーションを表すモジュールです。このようなモジュールは、上記のようにネイティブビルドツールと Spring Boot プラグインを定義する必要があります。 |
spring-boot:process-aot
org.springframework.boot:spring-boot-maven-plugin:3.5.7
アプリケーションで AOT エンジンを呼び出します。
必須パラメーター
| 名前 | タイプ | デフォルト |
|---|---|---|
|
| |
|
| |
|
| |
|
|
パラメーターの詳細
classesDirectory
アーカイブにパッケージ化する必要があるクラスとリソースファイルを含むディレクトリ。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
compilerArguments
AOT コンパイルプロセスに提供する必要がある引数。コマンドラインでは、複数の値を引用符で囲んでください。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
excludeGroupIds
除外する groupId 名のカンマ区切りリスト (完全一致)。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
excludes
除外するアーティファクト定義のコレクション。Exclude 要素は、必須の groupId および artifactId コンポーネントとオプションの classifier コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier
名前 |
|
|---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
generatedClasses
生成されたクラスを含むディレクトリ。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
generatedResources
生成されたリソースを含むディレクトリ。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
generatedSources
生成されたソースを含むディレクトリ。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
includes
含めるアーティファクト定義のコレクション。Include 要素は、必須の groupId および artifactId コンポーネントとオプションの classifier コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier
名前 |
|
|---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
jvmArguments
AOT プロセスに関連付ける必要がある JVM 引数。コマンドラインでは、複数の値を引用符で囲んでください。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
処理テスト
AOT エンジンは、Spring のテストコンテキストフレームワークを使用する JUnit 5 テストに適用できます。これらのテストは AOT エンジンによって処理され、ネイティブイメージで実行されます。
製品コードの場合と同様に、spring-boot-starter-parent は、ネイティブイメージでテストを実行するために必要な手順を効率化するために使用できる nativeTest プロファイルを定義します。
nativeTest プロファイルは、以下を構成します。
Spring Boot Maven プラグインがプロジェクトに適用されている場合の
process-test-aotの実行。ネイティブビルドツール Maven プラグイン (英語) がプロジェクトに適用されたときの
testの実行。実行により、特に次のような適切なデフォルトが定義されます。再パッケージ化された jar 形式を認識しないため、プラグインがメインの jar ファイルではなく生のクラスパスを使用していることを確認します。
適切な GraalVM バージョンが利用可能であることを検証します。
サードパーティの到達可能性メタデータをダウンロードします。
nativeTest プロファイルを活用するには、次の例に示すように、アプリケーションを表すモジュールで 2 つのプラグインを定義する必要があります。
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>この機能を必要とする各モジュールに対して上記を実施したら、次の例に示すように、マルチモジュールプロジェクトをビルドし、関連するサブモジュールのネイティブイメージでテストを実行できます。
$ mvn test -PnativeTest アプリケーション AOT 処理と同様に、BeanFactory はビルド時に完全に準備されます。 |
spring-boot:process-test-aot
org.springframework.boot:spring-boot-maven-plugin:3.5.7
テストで AOT エンジンを呼び出します。
必須パラメーター
| 名前 | タイプ | デフォルト |
|---|---|---|
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
パラメーターの詳細
classesDirectory
テストの実行に使用するクラスとリソースファイルを含むディレクトリ。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
compilerArguments
AOT コンパイルプロセスに提供する必要がある引数。コマンドラインでは、複数の値を引用符で囲んでください。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
excludeGroupIds
除外する groupId 名のカンマ区切りリスト (完全一致)。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
excludes
除外するアーティファクト定義のコレクション。Exclude 要素は、必須の groupId および artifactId コンポーネントとオプションの classifier コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier
名前 |
|
|---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
generatedClasses
生成されたテストクラスを含むディレクトリ。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
generatedResources
生成されたテストリソースを含むディレクトリ。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
generatedSources
生成されたソースを含むディレクトリ。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
generatedTestClasses
生成されたテストクラスを含むディレクトリ。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
includes
含めるアーティファクト定義のコレクション。Include 要素は、必須の groupId および artifactId コンポーネントとオプションの classifier コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier
名前 |
|
|---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
jvmArguments
AOT プロセスに関連付ける必要がある JVM 引数。コマンドラインでは、複数の値を引用符で囲んでください。
名前 |
|
|---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |