You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak自定义Provider依赖Quarkiverse包的生产部署问题

解决Keycloak自定义Provider集成Quarkus-CXF的生产部署冲突问题

核心问题原因

直接将quarkus-cxf的所有依赖jar放入Keycloak的providers目录,会和Keycloak内置的Quarkus/SmallRye组件版本冲突,导致类加载时出现类型不兼容错误——Keycloak自带的SmallRye Config版本与quarkus-cxf依赖的版本不匹配,引发QuarkusConfigFactory无法被识别为SmallRyeConfigFactory的子类型。

正确处理方式

1. 用Keycloak BOM统一依赖版本

在自定义Provider项目的pom.xml中引入Keycloak的Quarkus BOM,确保所有依赖(包括quarkus-cxf)的版本与Keycloak内置版本对齐:

<dependencyManagement>
    <dependencies>
        <!-- 替换为你使用的Keycloak版本 -->
        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-quarkus-bom</artifactId>
            <version>${keycloak.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- 引入适配Keycloak Quarkus版本的quarkus-cxf BOM -->
        <dependency>
            <groupId>io.quarkiverse.cxf</groupId>
            <artifactId>quarkus-cxf-bom</artifactId>
            <version>${quarkus-cxf.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

注意:quarkus-cxf.version需选择与Keycloak内置Quarkus版本兼容的版本,比如Keycloak 22.x对应Quarkus 2.16.x,需匹配该Quarkus版本的quarkus-cxf版本。

2. 打包Provider为含内部依赖的Jar

不要单独复制quarkus-cxf依赖jar到providers目录,而是用maven-shade-plugin将所需依赖打包到Provider Jar内部的lib目录,同时排除Keycloak已内置的组件:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        </transformers>
                        <artifactSet>
                            <includes>
                                <include>io.quarkiverse.cxf:*</include>
                                <include>org.apache.cxf:*</include>
                                <!-- 按需添加其他非Keycloak内置的依赖 -->
                            </includes>
                            <excludes>
                                <exclude>io.quarkus:*</exclude>
                                <exclude>io.smallrye:*</exclude>
                                <exclude>org.keycloak:*</exclude>
                            </excludes>
                        </artifactSet>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这样打包后的Provider Jar会包含所需的quarkus-cxf依赖,且不会与Keycloak内置组件冲突。

3. 部署仅需放入Provider Jar

将打包好的Provider Jar(含内部依赖)放入Keycloak分发包的providers目录,无需额外添加quarkus-cxf依赖Jar,直接执行:

./kc.bat build

4. 验证依赖兼容性

如果仍有问题,可通过以下命令查看Keycloak内置依赖版本,确保quarkus-cxf版本完全适配:

./kc.bat dev --debug

在启动日志中查找Quarkus和SmallRye Config的版本,核对quarkus-cxf的兼容版本。

内容的提问来源于stack exchange,提问作者gruszka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:09:23