Gradle复合构建下Quarkus CDI注入失败问题求助
Gradle复合构建下Quarkus CDI依赖注入失败(UnsatisfiedResolutionException)
我在使用Gradle 8和Quarkus 2.16.2.Final做复合构建时碰到了CDI注入问题:
- 库模块中定义了
@ApplicationScoped的AuthTokenProviderBean - 服务模块的
AuthTokenConsumer通过构造函数注入该Bean - 运行应用或执行测试时,均抛出
UnsatisfiedResolutionException,提示找不到该Bean的实现
已尝试的解决操作:
- 在库模块
src/main/resources/META-INF目录下添加了beans.xml - 在库模块的构建脚本中配置了Quarkus Jandex插件生成索引
但问题仍未解决,以下是完整代码、错误信息、构建配置及复现结构:
代码示例
库模块:AuthTokenProvider
package com.example.lib; import jakarta.enterprise.context.ApplicationScoped; @ApplicationScoped public class AuthTokenProvider { public String generateToken() { return "dummy-token-123"; } }
服务模块:AuthTokenConsumer
package com.example.service; import com.example.lib.AuthTokenProvider; import jakarta.enterprise.context.ApplicationScoped; @ApplicationScoped public class AuthTokenConsumer { private final AuthTokenProvider tokenProvider; // 构造函数注入 public AuthTokenConsumer(AuthTokenProvider tokenProvider) { this.tokenProvider = tokenProvider; } public String getToken() { return tokenProvider.generateToken(); } }
库模块beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_3_0.xsd" version="3.0" bean-discovery-mode="all"> </beans>
错误堆栈
jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type com.example.lib.AuthTokenProvider and qualifiers [@Default] - java member: com.example.service.AuthTokenConsumer#<init>(com.example.lib.AuthTokenProvider) - declared on CLASS bean [types=[com.example.service.AuthTokenConsumer, java.lang.Object], qualifiers=[@Default, @Any], target=com.example.service.AuthTokenConsumer] at io.quarkus.arc.impl.InjectableInstanceImpl.create(InjectableInstanceImpl.java:314) at io.quarkus.arc.impl.InjectableConstructor.create(InjectableConstructor.java:30) at io.quarkus.arc.impl.ArcContainerImpl.beanInstance(ArcContainerImpl.java:474) at io.quarkus.arc.impl.ArcContainerImpl.beanInstance(ArcContainerImpl.java:453) at io.quarkus.arc.impl.ArcContainerImpl$1.get(ArcContainerImpl.java:270) // 省略后续堆栈信息
构建文件
库模块 build.gradle
plugins { id 'java' id 'io.quarkus' version '2.16.2.Final' } repositories { mavenCentral() } dependencies { implementation 'io.quarkus:quarkus-arc' implementation 'jakarta.enterprise:jakarta.enterprise.cdi-api:3.0.0' } quarkus { jandex { enabled = true } }
服务模块 build.gradle
plugins { id 'java' id 'io.quarkus' version '2.16.2.Final' } repositories { mavenCentral() } dependencies { implementation project(':lib') implementation 'io.quarkus:quarkus-resteasy' testImplementation 'io.quarkus:quarkus-junit5' }
settings.gradle(复合构建配置)
rootProject.name = 'quarkus-multi-module' include ':lib' include ':service'
复现项目结构
quarkus-multi-module/ ├── settings.gradle ├── lib/ │ ├── build.gradle │ └── src/main/ │ ├── java/com/example/lib/AuthTokenProvider.java │ └── resources/META-INF/beans.xml └── service/ ├── build.gradle └── src/main/ └── java/com/example/service/AuthTokenConsumer.java
内容的提问来源于stack exchange,提问作者Jolleyboy
相关产品推荐
相关产品推荐

