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

Gradle复合构建下Quarkus CDI注入失败问题求助

Gradle复合构建下Quarkus CDI依赖注入失败(UnsatisfiedResolutionException)

我在使用Gradle 8和Quarkus 2.16.2.Final做复合构建时碰到了CDI注入问题:

  • 库模块中定义了@ApplicationScoped的AuthTokenProvider Bean
  • 服务模块的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:57:31