エクステンションの作成に関するよくある質問
エクステンションを作成すべきか
エクステンションを作成すべき理由
エクステンションについて を参照してください。 エクステンションの成熟度マトリックス は、エクステンションが提供できる機能の種類を示しています。 エクステンションが実行できるもう 1 つの便利な機能は、他のエクステンションをバンドルすることです。 アグリゲーターエクステンションの例については、Quarkus MicroProfile エクステンション を参照してください。
エクステンションが不要なケースはありますか?
すべての問題にエクステンションが必要なわけではありません。 外部ライブラリー (まだエクステンションではないもの) をバンドルして、小さな調整を加えるだけの場合は、エクステンションは必要ない場合があります。 たとえば、プレーンライブラリーは新しい設定要素を作成し、Jandex を使用してクラスを登録できます (この ブログで方法が示されています)。
エクステンションに追加すべきケイパビリティーの種類を知る方法
エクステンション成熟度マトリックス を参照してください。
バイトコード変換
クラスパス上のコードを変更するにはどうすればよいですか?
BytecodeTransformerBuildItem
を使用してバイトコードを操作できます。
たとえば、依存関係から問題のあるブリッジメソッドを削除したブログ を参照してください。
CDI
CDI を使用していますが、方法がわかりません…
CDI インテグレーションガイド では、エクステンションの作成者向けに、さまざまな CDI 関連のユースケースに対するソリューションが提示されています。
挿入されたフィールドを追加するためにユーザークラスを変換しましたが、CDI が機能しません
エクステンションが BytecodeTransformerBuildItem
を使用してユーザークラスを変換し、 @jakarta.annotation.Resource
を @jakarta.inject.Inject
に置き換えるとどうなりますか? フィールドは Arc によって挿入されません。
デバッグでは、変換されたクラスがアプリケーションにロードされていることが表示されますが、Arc では新しいコードが認識されないようです。
Arc 関連の変換は、通常、AnnotationsTransformerBuildItem を使用して実行する必要があります。 その理由は、Quarkus のすべてのバイトコード変換が Jandex のインデックス作成後に行われるためです。つまり、変更は Jandex に反映されません。
ほとんどのエクステンションは、Jandex を信頼できる情報源として使用し、何をすべきかを判断します。これらのエクステンションは、バイトコード内の新規または変更されたエンドポイントを認識できません。 この制限は、アノテーショントランスフォーマーで解決できます。ただし、Arc や Quarkus REST はアノテーショントランスフォーマーを適用しますが、すべてのエクステンションが対応しているわけではないことにも注意が必要です。
クラスパスのいずれかに @Inject アノテーションが追加されており、CDI が正しく機能しません。修正する方法を教えてください
AnnotationsTransformer
を実装し、問題のある注入サイトを取り除く必要があります。(ユースケースに CDI が含まれる場合は、BytecodeTransformer ではなく AnnotationsTransformer
にする必要があることに注意してください。) AnnotationsTransformer
エクステンションを使用して Airline ライブラリーから @Inject
以外のアノテーションをクリーンアップし、CDI 対応ランタイムで使用できるようにする方法は、このブログ を参照してください。
複数の部分に共通する機能や関心事
アプリケーションログを外部サービスにリダイレクトするにはどうすればよいですか?
LogHandlerBuildItem
は、アプリケーションログをリダイレクトする便利な方法です。出力を AWS CloudWatch に転送するエクステンションの実例 を参照してください。
エクステンションのインフラストラクチャーの構築とホスティング
エクステンションをビルドするために Gradle を使用できますか?
はい、ただし、それは最も典型的なパターンではありません。 Gradle エクステンションの設定手順は、初めてのエクステンション構築ガイド を参照してください。実装例については JobRunr エクステンション を参照してください。
エクステンションを code.quarkus.io に配置したい場合、Quarkiverse GitHub org に配置する必要がありますか?
カタログにエクステンションの登録と、ソースコードの場所とは無関係です。 quarkiverse リポジトリー には、エクステンションのリリースとテストを容易にするためのショートカットがいくつかありますが、どのエクステンションでも カタログに登録 できます。
エクステンションが extensions.quarkus.io に表示されません
エクステンションカタログ 内のエクステンションはすべて、 http://code.quarkus.io、 http://extensions.quarkus.io、およびコマンドラインツールに表示されるはずです。 http://extensions.quarkus.io の Web ページは数回遅れて更新されるため、新しいエクステンションが表示されるまでに時間がかかる場合があります。 不足しているエクステンションをデバッグするには、まず次の手順を実行します。
-
エクステンションが Maven Central に存在することを確認してください
-
エクステンションが エクステンションカタログリスト に含まれていることを確認します (一度だけ含める必要があり、今後のバージョンは自動的に検出されます)
-
エクステンションが、 Quarkus レジストリー のすべての既知のエクステンションのリストに記載されているかどうかを確認します。
-
カタログを更新してから、緑色の エクステンションサイトのビルド があるかどうかを確認します。