5.3. プロバイダー実装の登録
プロバイダーは、JAR ファイルを providers
ディレクトリーにコピーするだけでサーバーに登録されます。
Keycloak が提供していない別の依存関係が追加で必要な場合は、それを providers
ディレクトリーにコピーします。
新しいプロバイダーまたは依存関係を登録した後、Keycloak を、最適化なしの start コマンドまたは kc.[sh|bat] build
コマンドで再構築する必要があります。
プロバイダーの JAR は、分離されたクラスローダーにロードされないため、組み込みのリソースまたはクラスと、競合するリソースまたはクラスをプロバイダーの JAR に含めないでください。特に、application.properties ファイルを含めるか、commons-lang3 依存関係をオーバーライドすると、プロバイダーの JAR が削除された場合に自動ビルドが失敗します。競合するクラスが含まれている場合、サーバーの起動ログにパッケージ分離の警告が表示されることがあります。すべての組み込みの lib jar がパッケージ分離の警告ロジックによってチェックされるわけではありません。そのため、推移的な依存関係をバンドルまたは含める前に、lib ディレクトリーの JAR をチェックする必要があります。競合が発生した場合は、問題のあるクラスを削除するか再パッケージ化することで解決できます。
競合するリソースファイルがあっても、警告は表示されません。JAR のリソースファイルのパス名が、そのプロバイダーに固有のものであることを確認してください。または、次のような方法で、"install root"/lib/lib/main
ディレクトリー配下の JAR の内容に some.file
が存在するかどうかを確認してください。
find . -type f -name "*.jar" -exec unzip -l {} \; | grep some.file
削除されたプロバイダーの JAR に関連する NoSuchFileException
エラーが原因でサーバーが起動しない場合は、次を実行します。
./kc.sh -Dquarkus.launch.rebuild=true
これにより、Quarkus がクラスローディング関連のインデックスファイルを強制的に再構築します。その後、最適化なしの start または build を例外を出さずに実行できるはずです。
5.3.1. プロバイダーの無効化
プロバイダーを無効化するには、プロバイダーの enabled 属性を false に設定します。たとえば、Infinispan ユーザーキャッシュプロバイダーを無効にするには、以下を使用します。
bin/kc.[sh|bat] build --spi-user-cache-infinispan-enabled=false