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

使用Quarkus Maven Plugin生成OpenAPI客户端遇ResteasyReactiveJackson错误

问题描述

我尝试使用quarkus-maven-plugin为我的OpenAPI规范生成客户端,pom.xml相关配置如下:

<dependencies>
    <!-- https://mvnrepository.com/artifact/io.quarkus/quarkus-maven-plugin -->
    <dependency>
      <groupId>io.quarkiverse.openapi.generator</groupId>
      <artifactId>quarkus-openapi-generator</artifactId>
      <version>2.8.0-lts</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.quarkus/quarkus-rest-client-jackson -->
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-rest-client-jackson</artifactId>
      <version>3.18.1</version>
    </dependency>
</dependencies>

<build>
    <plugins>
      <plugin>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-maven-plugin</artifactId>
        <version>3.18.1</version>
        <extensions>true</extensions>
        <executions>
          <execution>
            <goals>
              <goal>build</goal>
              <goal>generate-code</goal>
              <goal>generate-code-tests</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
</build>

运行后出现错误:

[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:3.18.1:build (default) on project database-system-client: Failed to build quarkus application: Failed to load steps from class io.quarkus.rest.client.reactive.jackson.deployment.RestClientReactiveJacksonProcessor: Type io.quarkus.resteasy.reactive.jackson.common.deployment.processor.ResteasyReactiveJacksonProviderDefinedBuildItem not present -> [Help 1]

我的疑问:

  1. 为什么我尝试生成简单客户端代码时,Quarkus却在尝试生成响应式客户端?
  2. 该错误似乎与quarkus-rest-client-jackson相关,我偶然发现将版本降级到3.17.3就能正常运行,但我希望了解错误原因及正确解决方法。

解答

疑问1:为什么生成响应式客户端?

你使用的quarkus-openapi-generator扩展(2.8.0-lts版本)默认行为就是生成响应式Rest Client代码,它底层依赖Quarkus的响应式Rest Client栈,而非传统阻塞式实现。

如果需要生成阻塞式客户端,需在插件配置中显式指定library参数为rest-client(默认值是rest-client-reactive),示例配置如下:

<plugin>
  <groupId>io.quarkiverse.openapi.generator</groupId>
  <artifactId>quarkus-openapi-generator-maven-plugin</artifactId>
  <version>2.8.0-lts</version>
  <executions>
    <execution>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec>
        <library>rest-client</library> <!-- 指定生成阻塞式客户端 -->
      </configuration>
    </execution>
  </executions>
</plugin>

注:更推荐直接使用quarkus-openapi-generator-maven-plugin来精准控制生成行为,而非依赖quarkus-maven-plugin的通用generate-code目标。

疑问2:版本降级解决错误的原因及正确方案

错误原因

Quarkus 3.18.x版本对响应式Rest Client的Jackson依赖结构做了调整:ResteasyReactiveJacksonProviderDefinedBuildItem类的包路径/所属模块发生了变更,但你使用的quarkus-openapi-generator2.8.0-lts版本是基于旧Quarkus版本构建的,未适配3.18.x的结构变化,导致类找不到的错误。而3.17.3版本仍保留旧的类结构,因此降级后可以正常运行。

正确解决方法

有三种可行方案:

  1. 升级quarkus-openapi-generator版本:选择适配Quarkus 3.18.x的扩展版本(比如该扩展的3.x系列LTS版本),确保扩展与Quarkus核心版本的兼容性。
  2. 补充缺失的依赖:若暂时不想升级扩展,可添加quarkus-resteasy-reactive-jackson-common依赖,补充缺失的类:
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-resteasy-reactive-jackson-common</artifactId>
  <version>3.18.1</version>
</dependency>
  1. 切换到阻塞式客户端:按照疑问1中的配置生成阻塞式客户端,此时使用quarkus-rest-client-jackson(阻塞式依赖),可避开响应式栈的版本兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:27:35