Quarkus自定义Jar包中@ApplicationScoped类注入失败求助
Quarkus自定义Jar包CDI注入失败排查方案
检查Jar包的CDI索引是否生成
Quarkus的CDI依赖注入依赖预生成的索引文件,项目内部类会自动处理,但外部Jar包需要手动配置生成。- 如果你用Maven构建Jar项目,在pom.xml里添加quarkus插件配置,确保构建时生成索引:
<build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <executions> <execution> <goals> <goal>build</goal> <goal>generate-code</goal> <goal>generate-code-tests</goal> </goals> </execution> </executions> </plugin> </plugins> </build> - 打开Jar包检查是否存在
META-INF/jandex.idx文件,没有的话说明索引没生成,Quarkus找不到这个Bean。
- 如果你用Maven构建Jar项目,在pom.xml里添加quarkus插件配置,确保构建时生成索引:
确认Bean的注解和访问权限
- 确保
OAuth2Helper上的@ApplicationScoped是Quarkus兼容的包:要么是javax.enterprise.context.ApplicationScoped(旧版Quarkus),要么是jakarta.enterprise.context.ApplicationScoped(新版),别用Spring的同名注解。 - 类必须是
public修饰的,CDI没法注入非public的Bean。
- 确保
验证主项目的Jar依赖配置
- 用
mvn dependency:tree(Maven)或gradle dependencies(Gradle)确认Jar包已经正确引入到项目的classpath里。 - 如果是本地Jar,检查依赖路径是否正确,或者已经安装到本地Maven仓库(用
mvn install:install-file命令安装)。
- 用
排查Bean自身的依赖问题
错误提示“未满足的依赖”,可能是OAuth2Helper内部依赖了其他未被CDI管理的Bean:- 检查
OAuth2Helper的构造函数、字段注入的对象是否都添加了CDI注解(比如@ApplicationScoped、@Singleton等),且这些依赖的Bean也在CDI扫描范围内。 - 先简化
OAuth2Helper,去掉所有依赖,只保留空的@ApplicationScoped类,测试能否注入,逐步定位问题点。
- 检查
强制指定CDI扫描路径
如果前面的方法都没用,在主项目的application.properties里手动指定扫描包:
quarkus.cdi.scan-packages=io.acme.helpers,你的主项目基础包名
强制Quarkus扫描Jar包里的目标包。
内容的提问来源于stack exchange,提问作者dimon37
相关产品推荐
相关产品推荐

