web-dev-qa-db-ja.com

GraalVMおよびSpringアプリケーション

GraalVMシステムは、Springアプリケーションをネイティブイメージにコンパイルできないようです。

Springアプリケーションのサブセットをコンパイルし、別のライブラリとして、たとえば、通常のjavacコンパイラを使用してコンパイルした残りの部分で使用できますか?

あるいは、アプリケーションからいくつかのSpring機能を省略した場合はどうでしょうか?

他の可能性はありますか?

12
user577736

この質問の冒頭の声明は少しあいまいであるため、適切に対処するのは困難です。

GraalVMは、Springアプリケーションを絶対にコンパイルできます。 GraalVMディストリビューションは通常のJDKと非常によく似ており、javacユーティリティ、Javaユーティリティが含まれています。これらはパスに追加して、通常どおり使用できます。 $Java_HOME環境変数は、GraalVMディストリビューションをアンパックしたディレクトリを指し、$Java_HOME/binパスに移動し、MavenやGradle、またはその他のビルドツールを使用して、通常のビルド方法でSpringアプリケーションをビルドします。

GraalVMは、それ自体と他のJVMの両方でコンパイルされたSpringアプリケーションも実行できます。興味があれば、ここに Springアプリケーションの例 があります。これはGraalVMで実行されるだけでなく、Rを使用してGraalVMポリグロット機能を使用してデータのプロットを視覚化します。

さて、あなたが意図したのは、GraalVMが いくつかのJavaプログラム]の実行可能なネイティブイメージを作成する の能力だと思います。 GraalVMのネイティブイメージ生成プロセスには、 制限 があり、これにJavaコンパイルできるプログラムがあります。おそらく、主な問題は、Springが動的にロードすることです。

更新:2019年5月17日

これが、春のフレームワークの GraalVMネイティブイメージサポートのwikiページ です。

Andy Clementが作成した spring-boot-graal-feature 実験プロジェクトは、Spring BootアプリケーションをGraalVMネイティブイメージとしてすぐに実行できることを示しています。これは、今後の公式サポートの可能性の基礎として使用できます。

全体として、あなたはそれを試すかもしれませんが、物事は期待通りに完全に動作しないかもしれません。

以前の回答は以下の通りです:

spring-f プロジェクトがあります。これは、将来のSpring Bootリリースの新しいアイデアをテストするための機能構成に基づく実験的なKotlinマイクロフレームワークです。現在は experimenting です。 GraalVMによってネイティブイメージにコンパイルされます。

同時に、GraalVMチームは、Springアプリのネイティブイメージへのコンパイルを簡素化し、現在よりも多くのSpringアプリをサポートするためにできることを調査しています。いくつかの制限が残るため、GraalVMネイティブイメージとして機能しないSpringアプリを常に構築することはできませんが、おそらく機能するSpringアプリを構築することもできます。
これらの変更の正確なロードマップは現在不明です。

SpringFramework issue tracker ticket は、開発を確認するためにたどることができます。

32
Oleg Šelajev