升级Quarkus至3.1.3时遇java.lang.NoSuchMethodError错误求助
Quarkus 2.14升级至3.1.3时Jackson NoSuchMethodError问题解决
错误信息
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:3.1.3.Final:build (default) on project app: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors [ERROR] [error]: Build step io.quarkus.smallrye.openapi.deployment.SmallRyeOpenApiProcessor#build threw an exception: java.lang.NoSuchMethodError: 'com.fasterxml.jackson.core.StreamReadConstraints com.fasterxml.jackson.dataformat.yaml.YAMLParser.streamReadConstraints()' [ERROR] at com.fasterxml.jackson.dataformat.yaml.YAMLParser._parseNumericValue(YAMLParser.java:1109) [ERROR] at com.fasterxml.jackson.core.base.ParserBase.getNumberType(ParserBase.java:678) [ERROR] at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer._fromFloat(JsonNodeDeserializer.java:751) [ERROR] at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer._deserializeContainerNoRecursion(JsonNodeDeserializer.java:576) [ERROR] at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:98) [ERROR] at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:23) [ERROR] at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) [ERROR] at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4772) [ERROR] at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:3104) [ERROR] at io.smallrye.openapi.runtime.io.OpenApiParser.parse(OpenApiParser.java:86) [ERROR] at io.smallrye.openapi.runtime.OpenApiProcessor.modelFromStaticFile(OpenApiProcessor.java:126) [ERROR] at io.smallrye.openapi.runtime.OpenApiProcessor.modelFromStaticFile(OpenApiProcessor.java:97) [ERROR] at io.quarkus.smallrye.openapi.deployment.SmallRyeOpenApiProcessor.generateStaticModel(SmallRyeOpenApiProcessor.java:838) [ERROR] at io.quarkus.smallrye.openapi.deployment.SmallRyeOpenApiProcessor.build(SmallRyeOpenApiProcessor.java:728) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) [ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:568) [ERROR] at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909) [ERROR] at io.quarkus.builder.BuildContext.run(BuildContext.java:282) [ERROR] at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18) [ERROR] at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513) [ERROR] at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538) [ERROR] at java.base/java.lang.Thread.run(Thread.java:833) [ERROR] at org.jboss.threads.JBossThread.run(JBossThread.java:501) [ERROR] -> [Help 1]
解决方案
统一Jackson依赖版本
在pom.xml的dependencyManagement中导入Jackson BOM,强制所有模块使用指定版本:<dependencyManagement> <dependencies> <dependency> <groupId>com.fasterxml.jackson</groupId> <artifactId>jackson-bom</artifactId> <version>2.15.2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>清理构建缓存
执行Maven清理命令,彻底清除旧构建产物和缓存,强制更新依赖:mvn clean install -U强制Quarkus插件使用指定Jackson版本
在Quarkus Maven插件中显式指定Jackson依赖,避免插件自带的旧版本冲突:<build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>3.1.3.Final</version> <executions> <execution> <goals> <goal>build</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.15.2</version> </dependency> </dependencies> </plugin> </plugins> </build>检查静态OpenAPI文件
错误触发于解析OpenAPI静态文件,可临时移除项目中的OpenAPI yaml/json文件,重新构建验证是否为文件格式问题。
内容的提问来源于stack exchange,提问作者Hiago William Petris
相关产品推荐
相关产品推荐

