使用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]
我的疑问:
- 为什么我尝试生成简单客户端代码时,Quarkus却在尝试生成响应式客户端?
- 该错误似乎与
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版本仍保留旧的类结构,因此降级后可以正常运行。
正确解决方法
有三种可行方案:
- 升级
quarkus-openapi-generator版本:选择适配Quarkus 3.18.x的扩展版本(比如该扩展的3.x系列LTS版本),确保扩展与Quarkus核心版本的兼容性。 - 补充缺失的依赖:若暂时不想升级扩展,可添加
quarkus-resteasy-reactive-jackson-common依赖,补充缺失的类:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-reactive-jackson-common</artifactId> <version>3.18.1</version> </dependency>
- 切换到阻塞式客户端:按照疑问1中的配置生成阻塞式客户端,此时使用
quarkus-rest-client-jackson(阻塞式依赖),可避开响应式栈的版本兼容问题。
内容的提问来源于stack exchange,提问作者Rishabh Sharma
相关产品推荐
相关产品推荐

