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

Quarkus RestClient从MavenLocal引入时依赖注入失败问题

问题

我有两个项目目录,一个存放API接口,另一个存放服务实现。想在BFF服务中使用RestClient,因此将包含用户API接口与RestClient的users-api项目发布至MavenLocal,随后在BFF服务中注入UserClient,但启动服务时抛出以下错误:

error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: jakarta.enterprise.inject.spi.DeploymentException: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.acme.client.UserClient and qualifiers [@RestClient]
    - java member: org.acme.resource.UserResource#userClient
    - declared on CLASS bean [types=[java.lang.Object, org.acme.resource.UserResource], qualifiers=[@Default, @Any], target=org.acme.resource.UserResource]
    at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:1453)
    at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:311)
    at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:160)
    at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:472)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
    at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
    at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
    at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
    at java.base/java.lang.Thread.run(Thread.java:1583)
    at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.acme.client.UserClient and qualifiers [@RestClient]
    - java member: org.acme.resource.UserResource#userClient
    - declared on CLASS bean [types=[java.lang.Object, org.acme.resource.UserResource], qualifiers=[@Default, @Any], target=org.acme.resource.UserResource]
    at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:478)
    at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:624)
    at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:299)
    ... 11 more

我怀疑问题源于发布至MavenLocal的操作,application.yaml配置似乎未被加载,导致RestClient没有对应URL(已在build.gradle中添加implementation 'io.quarkus:quarkus-config-yaml')。若在BFF服务内重新创建UserClient则可正常运行。

相关配置如下:

UserClient 代码

@Path("/users")
@RegisterRestClient(configKey = "users-api")
public interface UserClient {

    @GET
    List<UserDto> list();

    @GET
    @Path("/{id}")
    UserDto get(UUID id);

    @POST
    UserDto create(UserDto userDto);

    @PUT
    @Path("/{id}")
    UserDto update(UUID id, UserDto userDto);

    @DELETE
    @Path("/{id}")
    void delete(UUID id);
}

UserResource 代码

@Path("/users")
public class UserResource {

    @RestClient
    UserClient userClient;

    @Inject
    UserMapper userMapper;

    @GET
    public List<UserResponse> list() {
        List<UserDto> users = userClient.list();
        return userMapper.toUserResponses(users);
    }
}

application.yaml 配置

quarkus:
  rest-client:
    users-api:
      url: http://localhost:8082 #user service URL

(曾尝试添加scope: jakarta.inject.Singleton,但无效)

解决思路与方案
  • 确保users-api项目的注解处理器生效:发布到MavenLocal前,需确认users-api项目的Quarkus注解处理器已生成必要的代理类和Bean元数据。检查Gradle配置:

    • 正确应用quarkus-gradle-plugin,确保编译阶段执行注解处理;
    • 项目依赖中包含quarkus-rest-client,因为@RegisterRestClient需要该依赖生成代理。
  • 检查BFF服务的依赖完整性:在BFF的build.gradle中,除了quarkus-config-yaml,必须添加quarkus-rest-client依赖,否则无法识别@RestClient注解并创建代理实例。

  • 验证MavenLocal中users-api包的内容:查看本地仓库里users-api的JAR包,确认包含META-INF/jandex.idx、META-INF/quarkus-arc.properties等元数据文件。若缺失,需在users-api项目中执行./gradlew quarkusBuild命令重新构建,确保产物包含必要的Quarkus元数据。

  • 确认BFF配置的正确性:BFF的application.yaml需放在src/main/resources目录下,确保构建时被打包进JAR;同时检查quarkus.rest-client.users-api.url配置是否正确。

  • 显式指定RestClient扫描包:若users-api的包不在BFF的默认扫描路径中,需在BFF的配置文件中添加扫描规则:

    quarkus:
      rest-client:
        scan-packages: org.acme.client
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:18:09