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

基于Micronaut的Gradle构建因snakeyaml版本冲突报错NoSuchMethodError

解决方案:解决Micronaut 3.9.1与OpenAPI Generator插件的snakeyaml版本冲突

问题核心

Micronaut 3.9.1通过BOM强制使用snakeyaml 2.0,但该版本移除了SafeConstructor的无参构造方法;而OpenAPI Generator插件6.6.0依赖的swagger-parser 2.1.6仍在调用这个已被移除的方法,Gradle依赖解析优先使用了Micronaut指定的2.0版本,导致NoSuchMethodError。

可行解决方案

1. 升级OpenAPI Generator插件到兼容snakeyaml 2.0的版本

OpenAPI Generator插件7.0.0及以上版本依赖的swagger-parser已更新至支持snakeyaml 2.0的版本(如2.1.12+)。直接升级插件版本即可解决冲突:

// build.gradle
plugins {
    id "org.openapi.generator" version "7.2.0" // 替换为7.x最新稳定版
}

升级后无需额外调整依赖,插件会自动使用兼容的swagger-parser版本,适配snakeyaml 2.0。

2. 单独锁定OpenAPI插件类路径的snakeyaml版本

如果无法升级插件,可通过Gradle的buildscript配置,给OpenAPI Generator插件的类路径单独指定snakeyaml 1.33,避免影响Micronaut项目本身的依赖:

// build.gradle
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.openapi.generator:openapi-generator-gradle-plugin:6.6.0") {
            exclude group: 'org.yaml', module: 'snakeyaml' // 排除插件自带的snakeyaml依赖
        }
        classpath("org.yaml:snakeyaml:1.33") // 强制插件使用1.33版本
    }
}

apply plugin: "org.openapi.generator"

这种方式让插件和项目使用不同版本的snakeyaml,互不干扰。

3. 强制升级swagger-parser到兼容版本

在项目中强制指定swagger-parser的版本为2.1.10及以上(该版本已适配snakeyaml 2.0),覆盖插件自带的旧版本:

// build.gradle
configurations.all {
    resolutionStrategy {
        force "io.swagger.parser.v3:swagger-parser:2.1.10"
        force "io.swagger.parser.v3:swagger-parser-core:2.1.10"
        force "io.swagger.parser.v3:swagger-parser-v3:2.1.10"
    }
}

此方案需要确保升级后的swagger-parser与OpenAPI Generator插件6.6.0兼容,测试后确认无其他兼容性问题即可使用。

验证方法

执行以下命令查看依赖树,确认版本是否正确应用:

  • 查看插件类路径依赖:./gradlew dependencies --configuration buildscriptClasspath
  • 查看项目依赖:./gradlew dependencies

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:25:30