1.10. JVM とネイティブビルドモード
従来の Java 仮想マシン (JVM) アプリケーションをコンパイルすることも、Mandrel または GraalVM の native-image ツールを使用してネイティブアプリケーションをコンパイルすることもできます。
1.10.1. アプリケーションを従来の JVM アプリケーションとしてコンパイルする リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションを、JVM アプリケーションとしてコンパイルできます。このオプションは、quarkus.package.type 設定プロパティーに基づいており、次のいずれかの JAR ファイルを生成します。
-
fast-jar: Quarkus およびデフォルトの設定オプション用に最適化された JAR ファイル。その結果、起動時間がわずかに短縮され、メモリー使用量がわずかに減少します。 -
legacy-jar: 典型的な JAR ファイル。 uber-jar: 単一のスタンドアロン JAR ファイル。これらのファイルはすべてのオペレーティングシステムで動作し、ネイティブイメージよりもはるかに短時間でビルドされます。
1.10.2. アプリケーションをネイティブイメージにコンパイルする リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションをネイティブイメージにコンパイルできます。その場合、quarkus.package.type 設定プロパティーを native に設定します。
このプロパティーを使用すると、たとえば Windows の .exe ファイルなど、選択したオペレーティングシステム専用にコンパイルされた実行可能バイナリーファイルを作成できます。これらのファイルは JAVA JAR ファイルよりも起動時間が短く、RAM 消費量も少なくなりますが、コンパイルには数分かかります。さらに、プロファイルに基づく最適化が欠落しているため、ネイティブバイナリーを使用して達成できる最大スループットは、通常の JVM アプリケーションよりも低くなります。
Mandrel を使用する
Mandrel は、GraalVM for Red Hat build of Quarkus 用に特化されたディストリビューションで、Linux コンテナー化環境をターゲットとするネイティブ実行可能ファイルをビルドする場合に推奨されるアプローチでもあります。Mandrel アプローチは、コンテナー化された環境にコンパイル出力を埋め込むのに最適ですが、Linux64 ビットのネイティブ実行可能ファイルしか提供されません。したがって、
.exeなどの結果はオプションではありません。Mandrel ユーザーは、ネイティブ実行可能ファイルのビルドにコンテナーを使用することが推奨されます。
公式 Mandrel イメージを使用して、Docker または Podman のローカルインストールでアプリケーションをネイティブモードにコンパイルするには、次のプロパティーを指定して
mvn packageコマンドを入力します。Docker の場合:
./mvnw package -Dnative -Dquarkus.package.type=native./mvnw package -Dnative -Dquarkus.native.container-build=true./mvnw package -Dnative -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-for-jdk-21-rhel8:23.1Podman の場合:
./mvnw package -Dnative -Dquarkus.package.type=native -Dquarkus.native.container-runtime=podman./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman./mvnw package -Dnative -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-for-jdk-21-rhel8:23.1 -Dquarkus.native.container-runtime=podman手順を実行した結果
これらのコマンドを実行すると、
targetディレクトリーに*-runnerバイナリーが作成されます。その場合は、以下が適用されます。-
*-runnerファイルは、Quarkus が生成するビルドされたネイティブバイナリーです。 -
targetディレクトリーは、Maven アプリケーションをビルドするときに Maven が作成するディレクトリーです。
-
GraalVM を使用する
Mandrel は macOS をサポートしていないため、Oracle GraalVM を使用してこのオペレーティングシステム上でネイティブ実行可能ファイルをビルドできます。
ベアメタル Linux または Windows ディストリビューション上で Oracle GraalVM を直接使用して、ネイティブ実行可能ファイルをビルドすることもできます。
Oracle GraalVM を使用してネイティブ実行可能ファイルをビルドする方法の詳細は、Red Hat build of Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルする を参照してください。