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

CDI注入依赖中@Produces生成的Bean时出现UnsatisfiedResolutionException异常

异常根因

该UnsatisfiedResolutionException异常表示Quarkus的Arc CDI容器在部署校验阶段,未找到匹配com.example.MessageHandler类型、@Default限定符的托管Bean,核心原因是自定义Maven依赖中的生产者逻辑未被Quarkus识别,常见触发场景如下:

  • 生产者类MessageHandlerProducer未添加CDI作用域注解:Quarkus要求承载@Produces方法的类必须是CDI托管Bean,需要标注@ApplicationScoped、@Singleton等作用域注解,无作用域注解的类不会被容器扫描,其中的生产方法也不会生效。
  • 自定义Maven依赖未配置Bean索引:Quarkus默认仅扫描当前项目的类路径资源,第三方依赖如果没有配置CDI Bean索引,内部的CDI类、生产者都不会被容器识别。
  • @Produces注解导包错误:若误导入JAX-RS的javax.ws.rs.Produces而非CDI规范的javax.enterprise.inject.Produces,注解不会被CDI容器解析。
解决方案

按照以下步骤依次排查修正即可:

  1. 修正生产者类的注解配置,补充作用域注解,确认导包正确:
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;

@ApplicationScoped
public class MessageHandlerProducer {

    @Produces
    public MessageHandler messageHandler() {
        return new MessageHandler();
    }
}
  1. 给自定义Maven依赖配置Bean索引,二选一即可:
  • 方案A:在依赖项目的src/main/resources/META-INF目录下创建空的beans.xml文件,Quarkus扫描到该文件后会将该依赖识别为合法的CDI Bean归档。
  • 方案B:在依赖项目的pom.xml中添加Jandex插件,构建时生成索引,扫描性能更优:
<build>
  <plugins>
    <plugin>
      <groupId>org.jboss.jandex</groupId>
      <artifactId>jandex-maven-plugin</artifactId>
      <version>1.2.3</version>
      <executions>
        <execution>
          <id>generate-index</id>
          <goals>
            <goal>jandex</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
  1. 若完成上述配置后仍报错,可在核心项目的application.properties中添加配置,强制扫描对应包路径:
quarkus.arc.additional-bean-packages=com.example # 替换为MessageHandler所在的包名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:18:00