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

主Quarkus项目调用子Quarkus项目服务时@Inject注入失败问题咨询

解决Quarkus主项目注入子项目CDI Bean失败的问题

你遇到的问题本质是主项目的CDI容器没有扫描到子项目中的@ApplicationScoped Bean,导致注入时找不到依赖;而手动new实例的话,对象脱离了CDI容器管理,内部的@Inject依赖(比如MongoClient)自然也不会被容器初始化。

下面是具体的解决步骤:

1. 确保子项目是合规的Quarkus模块

子项目的pom.xml需要正确引入Quarkus核心依赖,保证Bean能被CDI容器识别:

  • 如果是Maven子模块,继承Quarkus父POM:
<parent>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-bom</artifactId>
    <version>${quarkus.version}</version>
    <type>pom</type>
    <scope>import</scope>
</parent>
  • 至少引入quarkus-core依赖:
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-core</artifactId>
</dependency>

2. 配置主项目扫描子项目的Bean

主项目默认只会扫描自身包下的CDI Bean,需要显式配置扫描子项目的包路径:
在主项目的src/main/resources/application.properties中添加:

# 替换为子项目的实际包路径,多个包用逗号分隔
quarkus.cdi.beans-discovery-include=com.your.subproject.package

3. 检查主项目对子项目的依赖配置

确保主项目的pom.xml正确依赖子项目,依赖范围设置为compile:

<dependency>
    <groupId>your-group-id</groupId>
    <artifactId>subproject-artifact-id</artifactId>
    <version>your-version</version>
    <scope>compile</scope>
</dependency>

4. 验证子项目Bean的注解正确性

确保子项目中的Bean使用了正确的@ApplicationScoped注解:

  • Quarkus 3.x及以上版本用jakarta.enterprise.context.ApplicationScoped
  • Quarkus 2.x及以下版本用javax.enterprise.context.ApplicationScoped
    不要导入错误的包,否则CDI容器无法识别该Bean。

为什么new实例不行?

用new关键字创建的对象不属于CDI容器管理范畴,容器不会自动注入该对象内部的@Inject依赖(比如MongoClient),这些依赖会保持为null,自然无法正常工作。只有通过@Inject或CDI容器获取的Bean,其内部的依赖才会被容器自动初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:50:36