Apache Maven を使用した Quarkus アプリケーションの開発およびコンパイル
概要
前書き リンクのコピーリンクがクリップボードにコピーされました!
アプリケーション開発者は、Red Hat ビルドの Quarkus を使用して、OpenShift 環境およびサーバーレス環境で実行される Java で書かれたマイクロサービスベースのアプリケーションを作成できます。ネイティブ実行可能ファイルにコンパイルされたアプリケーションは、メモリーのフットプリントが小さく、起動時間は高速です。
本ガイドでは、Apache Maven プラグインを使用して Quarkus プロジェクトを作成する方法を説明します。
前提条件
OpenJDK (JDK) 11 がインストールされ、
JAVA_HOME環境変数が Java SDK の場所を指定していること。- Red Hat ビルドの Open JDK は、Red Hat カスタマーポータルの Software Downloads ページから入手可能です (ログインが必要です)。
Apache Maven 3.6.3 以降がインストールされていること。
- Maven は Apache Maven Project の Web サイトからダウンロードできます。
多様性を受け入れるオープンソースの強化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、弊社 の CTO、Chris Wright のメッセージ を参照してください。
第1章 Red Hat ビルドの Quarkus リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ビルドの Quarkus は、コンテナーおよび Red Hat OpenShift Container Platform と使用するために最適化された Kubernetes ネイティブ Java スタックです。Quarkus は、Eclipse MicroProfile、Apache Kafka、RESTEasy (JAX-RS)、Hibernate ORM (JPA)、Spring、Infinispan、Apache Camel などの一般的な Java 標準、フレームワーク、およびライブラリーと連携するように設計されています。
Quarkus のディペンデンシーインジェクション (依存性の注入) ソリューションは、CDI (コンテキストとディペンデンシーインジェクション) をベースとし、エクステンションフレームワークを備えているので、機能の拡張、およびフレームワークの設定、起動、アプリケーションへの統合が可能です。
Quarkus は、コンテナーファーストという手法で Java アプリケーションをビルドします。この手法により、Java で書かれたマイクロサービスベースのアプリケーションのビルドが大幅に容易になるほか、これらのアプリケーションがサーバーレスコンピューティングフレームワークで実行している関数を呼び出すことができるようになります。これにより、Quarkus アプリケーションのメモリーフットプリントは小さくなり、起動時間は高速化されます。
第2章 Apache Maven および Quarkus リンクのコピーリンクがクリップボードにコピーされました!
Apache Maven は、ソフトウェアプロジェクトの作成、管理、ビルドを行う Java アプリケーションの開発で使用される分散型ビルド自動化ツールです。Maven は Project Object Model (POM) ファイルと呼ばれる標準の設定ファイルを使用して、プロジェクトの定義やビルドプロセスの管理を行います。POM ファイルは、モジュールおよびコンポーネントの依存関係、ビルドの順番、結果となるプロジェクトパッケージングのターゲットを定義し、XML ファイルを使用して出力します。この結果、プロジェクトが適切かつ統一された状態でビルドされるようになります。
Maven リポジトリー
Maven リポジトリーには、Java ライブラリー、プラグイン、その他のビルドアーティファクトが格納されています。デフォルトのパブリックリポジトリーは Maven 2 Central Repository ですが、複数の開発チームの間で共通のアーティファクトを共有する目的で、社内のプライベートおよび内部リポジトリーを使用することができます。また、サードパーティーのリポジトリーも利用できます。
Quarkus プロジェクトでオンライン Maven リポジトリーを使用するか、または Red Hat ビルドの Quarkus Maven リポジトリーをダウンロードすることができます。
Maven プラグイン
Maven プラグインは、1 つ以上のゴールを達成する POM ファイルの定義された部分です。Quarkus アプリケーションは以下の Maven プラグインを使用します。
-
Quarkus Maven プラグイン (
quarkus-maven-plugin): Maven による Quarkus プロジェクトの作成を実現、uber-JAR ファイルの生成をサポート、そして開発モードを提供します。 -
Maven Surefire プラグイン (
maven-surefire-plugin): ビルドライフサイクルのテストフェーズで使用され、アプリケーションでユニットテストを実行します。プラグインは、テストレポートが含まれるテキストファイルと XML ファイルを生成します。
2.1. オンラインリポジトリーの Maven の settings.xml ファイルの設定 リンクのコピーリンクがクリップボードにコピーされました!
ユーザーの settings.xml ファイルを設定して、オンライン Quarkus リポジトリーを Quarkus Maven プロジェクトで使用することができます。これは推奨される手法です。リポジトリーマネージャーまたは共有サーバー上のリポジトリーと使用する Maven 設定は、プロジェクトの制御および管理を行いやすくします。
Maven の settings.xml ファイルを変更してリポジトリーを設定する場合、変更はすべての Maven プロジェクトに適用されます。
手順
テキストエディターまたは統合開発環境 (IDE) で、Maven の
~/.m2/settings.xmlファイルを開きます。注記~/.m2/ディレクトリーにsettings.xmlファイルがない場合は、$MAVEN_HOME/.m2/conf/ディレクトリーのsettings.xmlファイルを~/.m2/ディレクトリーにコピーします。以下の行を
settings.xmlファイルの<profiles>要素に追加します。<!-- Configure the Quarkus Maven repository --> <profile> <id>red-hat-enterprise-maven-repository</id> <repositories> <repository> <id>red-hat-enterprise-maven-repository</id> <url>https://maven.repository.redhat.com/ga/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>red-hat-enterprise-maven-repository</id> <url>https://maven.repository.redhat.com/ga/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile>以下の行を
settings.xmlファイルの<activeProfiles>要素に追加して、ファイルを保存します。<activeProfile>red-hat-enterprise-maven-repository</activeProfile>
2.2. Quarkus Maven リポジトリーのダウンロードおよび設定 リンクのコピーリンクがクリップボードにコピーされました!
オンライン Maven リポジトリーを使用しない場合は、Quarkus Maven リポジトリーをダウンロードして設定し、Maven を使用して Quarkus アプリケーションを作成できます。Quarkus Maven リポジトリーには、Java 開発者がアプリケーションのビルドに使用する必要があるものが数多く含まれています。この手順では、settings.xml ファイルを編集して Quarkus Maven リポジトリーを設定する方法を説明します。
Maven の settings.xml ファイルを変更してリポジトリーを設定する場合、変更はすべての Maven プロジェクトに適用されます。
手順
- Red Hat カスタマーポータルの Software Downloads ページから、Quarkus Maven リポジトリーの ZIP ファイルをダウンロードします (ログインが必要です)。
- ダウンロードしたアーカイブを展開します。
-
~/.m2/ディレクトリーに移動し、テキストエディターまたは統合開発環境 (IDE) で Maven のsettings.xmlファイルを開きます。 ダウンロードした Quarkus Maven リポジトリーのパスを、
settings.xmlファイルの<profiles>要素に追加します。Quarkus Maven リポジトリーのパスの形式は、file://$PATHである必要があります (例:file:///home/userX/rh-quarkus-1.7.6.GA-maven-repository/maven-repository)。<!-- Configure the Quarkus Maven repository --> <profile> <id>red-hat-enterprise-maven-repository</id> <repositories> <repository> <id>red-hat-enterprise-maven-repository</id> <url>file:///path/to/Quarkus/Maven/repository/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>red-hat-enterprise-maven-repository</id> <url>file:///path/to/Quarkus/Maven/repository/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile>以下の行を
settings.xmlファイルの<activeProfiles>要素に追加して、ファイルを保存します。<activeProfile>red-hat-enterprise-maven-repository</activeProfile>
Maven リポジトリーに古いアーティファクトが含まれる場合は、プロジェクトをビルドまたはデプロイしたときに以下のいずれかの Maven エラーメッセージが表示されることがあります。ここで、<artifact_name> は不明なアーティファクトの名前、<project_name> はビルドを試みているプロジェクトの名前になります。
-
Missing artifact <project_name> -
[ERROR] Failed to execute goal on project <artifact_name>; Could not resolve dependencies for <project_name>
この問題を解決するには、~/.m2/repository ディレクトリーにあるローカルリポジトリーのキャッシュバージョンを削除し、最新の Maven アーティファクトを強制的にダウンロードします。
第3章 コマンドラインでの Quarkus プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインで Quarkus Maven プラグインを使用し、コマンドラインで属性および値を指定するか、インタラクティブモードでプラグインを使用して、Quarkus プロジェクトを作成できます。作成されるプロジェクトには以下の要素が含まれます。
- Maven の構造
- 関連するユニットテスト
-
アプリケーションの起動後に
http://localhost:8080でアクセス可能なランディングページ -
src/main/dockerにおける JVM およびネイティブモード用のDockerfileサンプルファイル - アプリケーション設定ファイル
手順
コマンドターミナルで以下のコマンドを入力し、Maven が JDK 11 を使用していること、そして Maven のバージョンが 3.6.3 以上であることを確認します。
mvn --version- 上記のコマンドで JDK 11 が返されない場合は、JDK 11 へのパスを PATH 環境変数に追加し、上記のコマンドを再度入力します。
Quarkus Maven プラグインを使用して新規プロジェクトを作成するには、以下のいずれかの方法を使用します。
以下のコマンドを入力します。
mvn io.quarkus:quarkus-maven-plugin:1.7.6.Final-redhat-00014:create \ -DprojectGroupId=<project_group_id> \ -DprojectArtifactId=<project_artifact_id> \ -DplatformGroupId=com.redhat.quarkus \ -DplatformArtifactId=quarkus-universe-bom \ -DplatformVersion=1.7.6.Final-redhat-00014 \ -DclassName="<classname>"このコマンドで、以下の値を置き換えます。
-
<project_group_id>: プロジェクトの一意の識別子。 -
<project_artifact_id>: プロジェクトおよびプロジェクトディレクトリーの名前。 -
<classname>: 生成されたリソースの完全修飾名 (例:org.acme.quarkus.sample.HelloResource)。
-
インタラクティブモードでプロジェクトを作成します。
mvn io.quarkus:quarkus-maven-plugin:1.7.6.Final-redhat-00014:createプロンプトが表示されたら、必要な属性値を入力します。
注記以下のコマンドを入力し、プロジェクト属性のデフォルト値を使用してプロジェクトを作成することもできます。
mvn io.quarkus:quarkus-maven-plugin:1.7.6.Final-redhat-00014:create -B以下の表は、
createコマンドで定義できる属性を一覧表示しています。Expand 属性 デフォルト値 説明 projectGroupIdorg.acme.sampleプロジェクトの一意識別子。
projectArtifactIdなし
プロジェクトおよびプロジェクトディレクトリーの名前。
projectArtifactIdを指定しないと、Maven プラグインはインタラクティブモードを起動します。ディレクトリーがすでに存在する場合、生成は失敗します。projectVersion1.0-SNAPSHOTプロジェクトのバージョン。
platformGroupIdio.quarkusプラットフォームのグループ ID。既存のプラットフォームのデフォルト値はすべて、
io.quarkusです。ただし、デフォルト値は変更することができます。platformArtifactIdquarkus-universe-bomプラットフォーム BOM のアーティファクト ID。ローカルにビルドされた Quarkus を使用するには、
quarkus-universe-bomをpom.xmlファイルに追加します。platformVersionプラットフォームの最新バージョン
プロジェクトに使用するプラットフォームのバージョン。バージョン範囲を指定でき、Maven プラグインは最新バージョンを使用します。
classNameなし
生成されたリソースの完全修飾名。アプリケーションの作成後、REST エンドポイントは以下の URL で公開されます。
http://localhost:8080/$pathデフォルトの
pathを使用する場合、URL はhttp://localhost:8080/helloになります。path/helloリソースパス (
classNameを設定した場合のみ)。extensions[]
プロジェクトに追加するエクステンションのコンマ区切りリスト。
デフォルトでは、Quarkus Maven プラグインは最新の quarkus-universe-bom ファイルを使用します。この BOM は、アプリケーションからエクステンションを参照し、依存関係バージョンを合わせるためにエクステンションを集約します。オフラインの場合、Quarkus Maven プラグインは、ローカルで利用可能な quarkus-universe-bom の最新バージョンを使用します。Maven が quarkus-universe-bom バージョン 2.0 以前を見つけると、quarkus-universe-bom をベースにしたプラットフォームを使用します。
第4章 pom.xml ファイルの設定による Quarkus プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
Maven POM XML ファイルを設定して Quarkus プロジェクトを作成できます。
手順
-
テキストエディターで
pom.xmlファイルを開きます。 Quarkus GAV (Group、Artifact、Version) を追加し、
quarkus-universe-bomファイルを使用して、Quarkus の異なる依存関係のバージョンを省略します。<dependencyManagement> <dependencies> <dependency> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>${quarkus.platform.artifact-id}</artifactId> <version>${quarkus-plugin.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Quarkus Maven プラグインを追加します。
<build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus-plugin.version}</version> <executions> <execution> <goals> <goal>build</goal> </goals> </execution> </executions> </plugin> </plugins> </build>任意手順: ネイティブアプリケーションをビルドするには、Maven Surefire および Maven Failsafe プラグインを含む特定のネイティブプロファイルを追加し、
nativeパッケージタイプを有効化します。<profiles> <profile> <id>native</id> <properties> <quarkus.package.type>native</quarkus.package.type> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>${surefire-plugin.version}</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <systemProperties> <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path> </systemProperties> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>名前に
ITが含まれるテストは、@NativeImageTestアノテーションが付けられ、ネイティブ実行可能ファイルに対して実行されます。
第5章 Java コンパイラーの設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Quarkus Maven プラグインはコンパイラーフラグを maven-compiler-plugin プラグインから javac コマンドに渡します。
手順
開発モードで使用されるコンパイラーフラグをカスタマイズするには、
configurationセクションをpluginブロックに追加し、compilerArgsプロパティーを設定します。source、target、jvmArgsを設定することもできます。たとえば、--enable-previewを JVM とjavacの両方に渡すには、以下の行を追加します。<plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus-plugin.version}</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> <compilerArgs> <arg>--enable-preview</arg> </compilerArgs> <jvmArgs>--enable-preview</jvmArgs> </configuration> ... </plugin>
第6章 Quarkus アプリケーションを使用した Java エクステンションのインストールおよび管理 リンクのコピーリンクがクリップボードにコピーされました!
Java エクステンションを使用して、アプリケーションの機能を拡張し、フレームワークの設定、起動、アプリケーションへの統合が可能です。この手順では、エクステンションを検索して Quarkus プロジェクトに追加する方法を説明します。
前提条件
- Quarkus Maven プロジェクトがあること。
手順
- Quarkus プロジェクトディレクトリーに移動します。
利用可能なエクステンションを一覧表示するには、以下のコマンドを入力します。
./mvnw quarkus:list-extensionsプロジェクトにエクステンションを追加するには、以下のコマンドを入力します。ここで、
<extension>は、追加するエクステンションの Group、Artifact、Version (GAV) に置き換えます。./mvnw quarkus:add-extension -Dextensions="<extension>"たとえば、Agroal エクステンションを追加するには、以下のコマンドを入力します。
./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-agroal"特定のエクステンションを検索するには、
-Dextensions=の後にエクステンション名または名前の一部を入力します。以下の例では、名前に、jdbc、agroal、およびnon-exist-entのテキストが含まれるエクステンションを検索します。./mvnw quarkus:add-extension -Dextensions=jdbc,agroal,non-exist-entこのコマンドは、以下の結果を返します。
❌ Multiple extensions matching 'jdbc' * io.quarkus:quarkus-jdbc-h2 * io.quarkus:quarkus-jdbc-mariadb * io.quarkus:quarkus-jdbc-postgresql Be more specific e.g using the exact name or the full gav. ✅ Adding extension io.quarkus:quarkus-agroal ❌ Cannot find a dependency matching 'non-exist-ent', maybe a typo? [...]特定のテキスト文字列が返すすべてのエクステンションをインストールするには、
-Dextensions=の後にエクステンション名または名前の一部を入力します。以下の例では、hibernate-で始まるすべてのエクステンションを検索し、インストールします。./mvnw quarkus:add-extension -Dextensions="hibernate-*"
第7章 Quarkus プロジェクトの IDE へのインポート リンクのコピーリンクがクリップボードにコピーされました!
テキストエディターで Quarkus プロジェクトを開発することは可能ですが、統合開発環境 (IDE) を使用した方がプロジェクトの作業がしやすいかもしれません。以下の手順では、Quarkus プロジェクトを特定の IDE にインポートする方法を説明します。
前提条件
- Quarkus Maven プロジェクトがあること。
手順
以下のいずれかのセクションの手順を実行します。
CodeReady Studio または Eclipse
- CodeReady Studio または Eclipse で、File → Import とクリックします。
- Maven → Existing Maven Project と選択します。
- 次の画面で、プロジェクトのルートロケーションを選択します。見つかったモジュールの一覧が表示されます。
- 生成されたプロジェクトを選択し、Finish をクリックします。
アプリケーションを起動するには、新しいターミナルウィンドウに以下のコマンドを入力します。
./mvnw compile quarkus:dev
IntelliJ
IntelliJ で、以下のタスクのいずれかを実行します。
- File → New → Project From Existing Sources と選択します。
- Welcome ページで Import project を選択します。
- プロジェクトの root ディレクトリーを選択します。
- Import project from external model を選択してから、Maven を選択します。
- オプションを確認して Next をクリックします。
- Finish をクリックします。
アプリケーションを起動するには、新しいターミナルウィンドウに以下のコマンドを入力します。
./mvnw compile quarkus:dev
Apache NetBeans
- File → Open Project と選択します。
-
プロジェクトの
rootディレクトリーを選択します。 - Open Project クリックします。
アプリケーションを起動するには、新しいターミナルウィンドウに以下のコマンドを入力します。
./mvnw compile quarkus:dev
Visual Studio Code
- Java Extension Pack をインストールします。
- Visual Studio Code でプロジェクトディレクトリーを開きます。プロジェクトは Maven プロジェクトとしてロードされます。
第8章 Quarkus プロジェクトの出力の設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションをビルドする前に、application.properties ファイルのアプリケーションプロパティーのデフォルト値を変更することで、ビルドコマンドの出力を制御できます。
前提条件
- Quarkus Maven プロジェクトがあること。
手順
-
テキストエディターで
application.propertiesファイルを開きます。 変更するプロパティーの値を編集し、ファイルを保存します。
以下の表は、変更可能なプロパティーをまとめたものです。
Expand プロパティー 説明 タイプ デフォルト quarkus.package.main-classアプリケーションのエントリーポイント。ほとんどの場合、この値は変更する必要があります。
string
io.quarkus.runner.GeneratedMainquarkus.package.type要求された出力タイプ。
string
jarquarkus.package.uber-jarJava ランナーを uber-JAR としてパックすべきかどうか。
boolean
falsequarkus.package.manifest.add-implementation-entries実装情報をランナー JAR ファイルの
MANIFEST.MFファイルに含めるかどうか。boolean
truequarkus.package.user-configured-ignored-entries出力アーティファクトにコピーしてはならないファイル。
string (list)
quarkus.package.runner-suffixランナー JAR ファイルに適用される接尾辞。
string
-runnerquarkus.package.output-directoryアプリケーションビルドの出力フォルダー。これは、ビルドシステムのターゲットディレクトリーと相対的に解決されます。
string
quarkus.package.output-name最終的なアーティファクトの名前。
string
第9章 Quarkus アプリケーションのテスト リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Quarkus アプリケーションをテストする場合、Maven は test 設定プロファイルを使用します。ただし、Maven Surefire プラグインを使用して、テスト用のカスタム設定プロファイルを作成することができます。
前提条件
- Apache Maven を使用して作成した Quarkus プロジェクトがあること。
手順
テスト要件を満たすように以下の例を編集します。
<profile_name>は、テストプロファイルの名前に置き換えます。<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${surefire-plugin.version}</version> <configuration> <systemPropertyVariables> <quarkus.test.profile><profile_name></quarkus.test.profile> <buildDirectory>${project.build.directory}</buildDirectory> [...] </systemPropertyVariables> </configuration> </plugin> </plugins> </build> [...] </project>
ネイティブモードでは、カスタムのテスト設定プロファイルは使用できません。ネイティブテストは常に、prod プロファイルを使用して実行されます。
第10章 Quarkus アプリケーションのビルドクラスパスツリーのロギング リンクのコピーリンクがクリップボードにコピーされました!
Quarkus ビルドプロセスでは、アプリケーションで使用するエクステンションのデプロイメント依存関係が、元のアプリケーションクラスパスに追加されます。ビルドクラスパスに含まれる依存関係およびバージョンを確認することができます。quarkus-bootstrap Maven プラグインには、アプリケーションのビルド依存関係ツリーを表示する build-tree ゴールが含まれます。
前提条件
- Quarkus Maven アプリケーションがあること。
手順
プラグイン設定を
pom.xmlファイルに追加します。<project> [...] <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-bootstrap-maven-plugin</artifactId> <version>${quarkus-plugin.version}</version> </plugin> [...] </project>アプリケーションのビルド依存関係ツリーを一覧表示するには、以下のコマンドを入力します。
./mvnw quarkus-bootstrap:build-treeこのコマンドの出力は、以下のようになります。
[INFO] --- quarkus-bootstrap-maven-plugin:1.7:build-tree (default-cli) @ getting-started --- [INFO] org.acme:getting-started:jar:1.0-SNAPSHOT [INFO] └─ io.quarkus:quarkus-resteasy-deployment:jar:1.7 (compile) [INFO] ├─ io.quarkus:quarkus-resteasy-server-common-deployment:jar:1.7 (compile) [INFO] │ ├─ io.quarkus:quarkus-core-deployment:jar:1.7 (compile) [INFO] │ │ ├─ commons-beanutils:commons-beanutils:jar:1.9.3 (compile) [INFO] │ │ │ ├─ commons-logging:commons-logging:jar:1.2 (compile) [INFO] │ │ │ └─ commons-collections:commons-collections:jar:3.2.2 (compile) ...
mvn dependency:tree コマンドは、アプリケーションのランタイム依存関係のみを表示します。
第11章 ネイティブ実行可能ファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
Podman または Docker などのコンテナーランタイムを使用して、Quarkus アプリケーションからネイティブ実行可能ファイルを作成することができます。Quarkus は、ビルダーイメージを使用してバイナリー実行可能ファイルを作成します。これは、Red Hat Universal Base Images RHEL8-UBI および RHEL8-UBI minimal と共に使用することができます。Red Hat ビルドの Quarkus 1.7 は、quarkus.native.builder-image プロパティーのデフォルトとして registry.access.redhat.com/quarkus/mandrel-20-rhel8:20.3 を使用します。
お使いのアプリケーションのネイティブ実行可能ファイルには、アプリケーションコード、必須ライブラリー、Java API、および仮想マシン (VM) の縮小版が含まれます。縮小された仮想マシンベースは、アプリケーションの起動時間を高速化し、ディスクのフットプリントを小さくします。
手順
Getting Started プロジェクトの
pom.xmlファイルを開き、nativeプロファイルが含まれていることを確認します。<profiles> <profile> <id>native</id> <properties> <quarkus.package.type>native</quarkus.package.type> </properties> </profile> </profiles>注記Quarkus
nativeプロファイルを使用すると、ネイティブ実行可能ファイルおよびネイティブイメージテストの両方を実行することができます。以下のいずれかの方法を使用して、ネイティブ実行可能ファイルをビルドします。
Docker を使用してネイティブ実行可能ファイルをビルドします。
./mvnw package -Pnative -Dquarkus.native.container-build=truePodman を使用してネイティブ実行可能ファイルをビルドします。
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podmanこれらのコマンドは、
targetディレクトリーにgetting-started-*-runnerバイナリーを作成します。重要Quarkus アプリケーションをネイティブ実行可能ファイルにコンパイルすると、分析および最適化の際にメモリーを大量に消費します。
quarkus.native.native-image-xmx設定プロパティーを設定することで、ネイティブコンパイル時に使用されるメモリーの量を制限することができます。メモリー制限を低く設定すると、ビルド時間が長くなる可能性があります。
ネイティブ実行可能ファイルを実行します。
./target/getting-started-*-runnerネイティブ実行可能ファイルをビルドする場合、
prodプロファイルが有効化され、Quarkus ネイティブテストは、prodプロファイルを使用して実行されます。これは、quarkus.test.native-image-profileプロパティーを使用して変更することができます。
11.1. 手動でのコンテナーの作成 リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、Linux X86_64 向けにアプリケーションを使用してコンテナーイメージを手動で作成する方法を説明します。Quarkus Native コンテナーを使用してネイティブイメージを作成する場合、Linux X86_64 オペレーティングシステムをターゲットとする実行可能ファイルを作成します。お使いのホストオペレーティングシステムが別のものである場合は、バイナリーを直接実行することはできないので、コンテナーを手動で作成する必要があります。
Quarkus Getting Started プロジェクトには、以下の内容と共に src/main/docker ディレクトリーに Dockerfile.native が含まれます。
FROM registry.access.redhat.com/ubi8/ubi-minimal
WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
Dockerfiles は、ベースイメージとして UBI を使用します。このベースイメージは、コンテナーで機能するように設計されています。Dockerfiles は、ベースイメージの minimal バージョン を使用して、作成されたイメージのサイズを縮小します。
手順
以下のいずれかの方法を使用して、ネイティブ Linux 実行可能ファイルをビルドします。
Docker を使用してネイティブ実行可能ファイルをビルドします。
./mvnw package -Pnative -Dquarkus.native.container-build=truePodman を使用してネイティブ実行可能ファイルをビルドします。
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
以下のいずれかの方法を使用して、コンテナーイメージをビルドします。
Docker を使用してコンテナーイメージをビルドします。
docker build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .Podman を使用してコンテナーイメージをビルドします。
podman build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .
コンテナーを実行します。
Docker を使用してコンテナーを実行します。
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-startedPodman を使用してコンテナーを実行します。
podman run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
Red Hat OpenShift Container Platform での Quarkus Maven アプリケーションのデプロイに関する詳細は、『Red Hat OpenShift Container Platform での Quarkus アプリケーションのデプロイ』 を参照してください。
第12章 ネイティブ実行可能ファイルのテスト リンクのコピーリンクがクリップボードにコピーされました!
ネイティブ実行可能ファイルの機能をテストするために、ネイティブモードで実行するアプリケーションをテストします。@NativeImageTest アノテーションを使用して、ネイティブ実行可能ファイルをビルドし、http エンドポイントに対してテストを実行します。
手順
pom.xmlファイルを開き、nativeプロファイルに以下の要素が含まれていることを確認します。<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>${surefire-plugin.version}</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <systemPropertyVariables> <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path> <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> <maven.home>${maven.home}</maven.home> </systemPropertyVariables> </configuration> </execution> </executions> </plugin>failsafe-maven-pluginはインテグレーションテストを実行し、作成されたネイティブ実行可能ファイルの場所を示します。src/test/java/org/acme/quickstart/NativeGreetingResourceIT.javaファイルを開き、以下の内容が含まれていることを確認します。package org.acme.quickstart; import io.quarkus.test.junit.NativeImageTest; @NativeImageTest1 public class NativeGreetingResourceIT extends GreetingResourceTest {2 // Run the same tests }テストを実行します。
./mvnw verify -Pnative以下の例は、このコマンドの出力を示しています。
./mvnw verify -Pnative ... [getting-started-1.0-SNAPSHOT-runner:18820] universe: 587.26 ms [getting-started-1.0-SNAPSHOT-runner:18820] (parse): 2,247.59 ms [getting-started-1.0-SNAPSHOT-runner:18820] (inline): 1,985.70 ms [getting-started-1.0-SNAPSHOT-runner:18820] (compile): 14,922.77 ms [getting-started-1.0-SNAPSHOT-runner:18820] compile: 20,361.28 ms [getting-started-1.0-SNAPSHOT-runner:18820] image: 2,228.30 ms [getting-started-1.0-SNAPSHOT-runner:18820] write: 364.35 ms [getting-started-1.0-SNAPSHOT-runner:18820] [total]: 52,777.76 ms [INFO] [INFO] --- maven-failsafe-plugin:2.22.1:integration-test (default) @ getting-started --- [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running org.acme.quickstart.NativeGreetingResourceIT Executing [/data/home/gsmet/git/quarkus-quickstarts/getting-started/target/getting-started-1.0-SNAPSHOT-runner, -Dquarkus.http.port=8081, -Dtest.url=http://localhost:8081, -Dquarkus.log.file.path=build/quarkus.log] 2019-04-15 11:33:20,348 INFO [io.quarkus] (main) Quarkus 999-SNAPSHOT started in 0.002s. Listening on: http://[::]:8081 2019-04-15 11:33:20,348 INFO [io.quarkus] (main) Installed features: [cdi, resteasy] [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.387 s - in org.acme.quickstart.NativeGreetingResourceIT ...注記Quarkus は、ネイティブイメージの開始まで 60 秒間待機し、その後ネイティブテストに自動的に失敗します。この待機時間は、
quarkus.test.native-image-wait-timeシステムプロパティーを使用して変更可能です。以下のコマンドを使用して、待機時間を延長することができます。
<duration>は、秒単位の待機時間になります。./mvnw verify -Pnative -Dquarkus.test.native-image-wait-time=<duration>
第13章 Quarkus 開発モードの使用 リンクのコピーリンクがクリップボードにコピーされました!
開発モードはバックグラウンドコンパイルによるホットデプロイメントを可能にします。つまり、Java ファイルまたはリソースファイルを変更してブラウザーを更新すると、変更が自動的に反映されます。これは、設定プロパティーファイルなどのリソースファイルでも同じく反映されます。
前提条件
- Quarkus Maven アプリケーションがあること。
手順
開発モードで Quarkus を起動するには、Quarkus アプリケーションの
pom.xmlファイルが含まれるディレクトリーで以下のコマンドを入力します。./mvnw quarkus:dev- アプリケーションに変更を加え、ファイルを保存します。
ブラウザーを更新して、ワークスペースのスキャンをトリガーします。
変更が検出されると、Java ファイルが再コンパイルされ、アプリケーションが再デプロイされます。その後、要求は再デプロイされたアプリケーションによって処理されます。コンパイルまたはデプロイメントに問題がある場合には、エラーページが表示されます。
開発モードでは、デバッガーがアクティベートされ、ポート
5005をリッスンします。任意手順: アプリケーションの実行前にデバッガーが割り当てられるのを待つには、
-Dsuspendを追加します。./mvnw quarkus:dev -Dsuspend任意手順: デバッガーが実行されないようにするには、
-Ddebug=falseを追加します。./mvnw quarkus:dev -Ddebug=false
第14章 Quarkus プロジェクトのデバッグ リンクのコピーリンクがクリップボードにコピーされました!
Quarkus が開発モードで起動すると、デバッグはデフォルトで有効になります。デバッガーは、JVM を一時停止せずにポート 5005 でリッスンします。
前提条件
- Quarkus Maven プロジェクトがあること。
手順
デバッグを制御するには、以下のいずれかの方法を使用します。
システムプロパティーを使用したデバッガーの制御
以下の
debugシステムプロパティーの値の 1 つを変更します。ここで、PORTはデバッガーがリッスンするポートです。-
false: JVM はデバッグモードを無効にして開始します。 -
true: JVM はデバッグモードで開始され、ポート5005でリッスンしています。 -
client: JVM はクライアントモードで起動され、localhost:5005への接続を試みます。 -
PORT: JVM はデバッグモードで開始され、PORTをリッスンしています。
-
suspendシステムプロパティーの値を変更します。このプロパティーは、Quarkus がデバッグモードで開始する際に使用されます。-
yまたはtrue: デバッグモードの JVM の起動が一時停止します。 -
nまたはfalse: デバッグモードの JVM は一時停止せずに起動します。
-
コマンドラインからのデバッガーの制御
デバッグモードの JVM で Quarkus アプリケーションを起動するには、以下のコマンドを入力します。
./mvnw compile quarkus:dev -Ddebug-
localhost:5005にデバッガーを割り当てます。
第15章 その他のリソース リンクのコピーリンクがクリップボードにコピーされました!
改訂日時: 2021-04-27 03:44:04 UTC