Quarkus 3.2.0出现2.16.x版本未有的构建错误
Quarkus 3.2.0 依赖冲突:
jakarta.ws.rs.ext.Providers 歧义依赖问题 问题场景
服务升级到Quarkus 3.2.0版本后,仅在引入自研3.2.0扩展(该扩展依赖多个其他自研3.2.0扩展)时出现编译构建错误。已排查所有扩展代码,未发现未标注@ApplicationScoped的@Provider类,且相同代码在Quarkus 2.16.6版本下无异常。
构建错误日志
Failed to execute goal io.quarkus.platform:quarkus-maven-plugin:3.2.0.Final:build (default) on project edcs-quarkus-sample-service: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors [ERROR] [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: jakarta.enterprise.inject.spi.DeploymentException: Found 2 deployment problems: [ERROR] [1] Ambiguous dependencies for type jakarta.ws.rs.ext.Providers and qualifiers [@Default] [ERROR] - java member: io.quarkus.resteasy.reactive.jackson.runtime.serialisers.FullyFeaturedServerJacksonMessageBodyWriter():providers [ERROR] - declared on CLASS bean [types=[jakarta.ws.rs.ext.MessageBodyWriter<java.lang.Object>, org.jboss.resteasy.reactive.server.spi.ServerMessageBodyWriter$AllWriteableMessageBodyWriter, org.jboss.resteasy.reactive.common.types.AllWriteableMarker, io.quarkus.resteasy.reactive.jackson.runtime.serialisers.FullyFeaturedServerJacksonMessageBodyWriter, org.jboss.resteasy.reactive.server.spi.ServerMessageBodyWriter<java.lang.Object>, java.lang.Object], qualifiers=[@Default, @Any], target=io.quarkus.resteasy.reactive.jackson.runtime.serialisers.FullyFeaturedServerJacksonMessageBodyWriter] [ERROR] - available beans: [ERROR] - PRODUCER METHOD bean [types=[java.lang.Object, jakarta.ws.rs.ext.Providers], qualifiers=[@Default, @Any], target=jakarta.ws.rs.ext.Providers providers(), declaringBean=org.jboss.resteasy.cdi.ContextProducers] [ERROR] - PRODUCER METHOD bean [types=[java.lang.Object, jakarta.ws.rs.ext.Providers], qualifiers=[@Default, @Any], target=jakarta.ws.rs.ext.Providers providers(), declaringBean=io.quarkus.resteasy.reactive.server.runtime.QuarkusContextProducers] [ERROR] [2] Ambiguous dependencies for type jakarta.ws.rs.ext.Providers and qualifiers [@Default] [ERROR] - java member: io.quarkus.resteasy.reactive.jackson.runtime.serialisers.FullyFeaturedServerJacksonMessageBodyReader():providers [ERROR] - declared on CLASS bean [types=[io.quarkus.resteasy.reactive.jackson.runtime.serialisers.FullyFeaturedServerJacksonMessageBodyReader, org.jboss.resteasy.reactive.server.jackson.JacksonBasicMessageBodyReader, org.jboss.resteasy.reactive.common.providers.serialisers.AbstractJsonMessageBodyReader, jakarta.ws.rs.ext.MessageBodyReader<java.lang.Object>, org.jboss.resteasy.reactive.server.spi.ServerMessageBodyReader<java.lang.Object>, java.lang.Object], qualifiers=[@Default, @Any], target=io.quarkus.resteasy.reactive.jackson.runtime.serialisers.FullyFeaturedServerJacksonMessageBodyReader] [ERROR] - available beans: [ERROR] - PRODUCER METHOD bean [types=[java.lang.Object, jakarta.ws.rs.ext.Providers], qualifiers=[@Default, @Any], target=jakarta.ws.rs.ext.Providers providers(), declaringBean=org.jboss.resteasy.cdi.ContextProducers] [ERROR] - PRODUCER METHOD bean [types=[java.lang.Object, jakarta.ws.rs.ext.Providers], qualifiers=[@Default, @Any], target=jakarta.ws.rs.ext.Providers providers(), declaringBean=io.quarkus.resteasy.reactive.server.runtime.QuarkusContextProducers]
问题根源分析
核心问题是**jakarta.ws.rs.ext.Providers 存在两个重复的生产者Bean**:
org.jboss.resteasy.cdi.ContextProducersio.quarkus.resteasy.reactive.server.runtime.QuarkusContextProducers
两者都提供了@Default限定的Providers实例,导致CDI容器无法确定注入哪个实例,触发歧义依赖错误。
Quarkus 3.x基于Jakarta EE 9+,与2.x(Jakarta EE 8)的Resteasy/Reactive组件实现差异较大,大概率是自研扩展在依赖引入时,同时引入了传统Resteasy和Resteasy Reactive的相关依赖,或是扩展的依赖配置在3.x版本下出现冲突。
排查与解决步骤
检查扩展依赖树
- 执行
mvn dependency:tree,搜索resteasy-cdi和quarkus-resteasy-reactive相关依赖,确认是否同时存在这两类依赖 - 若发现冲突,在自研扩展的pom.xml中排除多余依赖(比如使用Resteasy Reactive时,排除
resteasy-cdi相关依赖)
- 执行
检查扩展部署配置
- 确认自研扩展的
deployment模块是否错误引入了不兼容的Resteasy组件 - 检查扩展的
@BuildStep是否存在不当依赖引入,导致触发两个不同的Providers生产者
- 确认自研扩展的
验证Provider Scope配置
- 再次确认所有自定义JAX-RS Provider是否正确标注
@ApplicationScoped,排查是否存在通过其他方式注册Provider导致的冲突 - 检查是否有扩展在注册Provider时,重复引入了Resteasy的上下文生产者
- 再次确认所有自定义JAX-RS Provider是否正确标注
调整Quarkus版本
- 若为Quarkus 3.2.0本身的已知问题,可尝试升级到3.2.x后续小版本,或回退到3.1.x版本验证是否解决问题
内容的提问来源于stack exchange,提问作者tbkahuna
相关产品推荐
相关产品推荐

