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

Micronaut应用启动SnakeYAML依赖错误的解决咨询

问题描述

启动Micronaut应用时触发如下错误:

2023-11-02 22:36:41 ERROR i.m.r.Micronaut(handleStartupException):338 - Error starting Micronaut server: org.yaml.snakeyaml.constructor.SafeConstructor: method 'void <init>()' not found
java.lang.NoSuchMethodError: org.yaml.snakeyaml.constructor.SafeConstructor: method 'void <init>()' not found
    at io.micronaut.context.env.yaml.CustomSafeConstructor.<init>(CustomSafeConstructor.java:36) ~[micronaut-inject-3.7.1.jar:3.7.1]
    at io.micronaut.context.env.yaml.YamlPropertySourceLoader.processInput(YamlPropertySourceLoader.java:56) ~[micronaut-inject-3.7.1.jar:3.7.1]
    at io.micronaut.context.env.AbstractPropertySourceLoader.read(AbstractPropertySourceLoader.java:117) ~[micronaut-inject-3.7.1.jar:3.7.1]
    at io.micronaut.context.env.AbstractPropertySourceLoader.loadProperties(AbstractPropertySourceLoader.java:102) ~[micronaut-inject-3.7.1.jar:3.7.1]
    at io.micronaut.context.env.AbstractPropertySourceLoader.load(AbstractPropertySourceLoader.java:68) ~[micronaut-inject-3.7.1.jar:3.7.1]
    at io.micronaut.context.env.AbstractPropertySourceLoader.load(AbstractPropertySourceLoader.java:55) ~[micronaut-inject-3.7.1.jar:3.7.1]
    at io.micronaut.context.env.DefaultEnvironment.loadPropertySourceFromLoader(DefaultEnvironment.java:607) ~[micronaut-inject-3.7.1.jar:3.7.1]
    at io.micronaut.context.env.DefaultEnvironment.readPropertySourceList(DefaultEnvironment.java:541) ~[micronaut-inject-3.7.1.jar:3.7.1]
    at io.micronaut.context.env.DefaultEnvironment.readPropertySourceList(DefaultEnvironment.java:527) ~[micronaut-inject-3.7.1.jar:3.7.1]
    at io.micronaut.context.DefaultApplicationContext$RuntimeConfiguredEnvironment.readPropertySourceList(DefaultApplicationContext.java:794) ~[micronaut-inject-3.7.1.jar:3.7.1]

尝试以下依赖调整后问题依旧:

implementation group: 'org.yaml', name: 'snakeyaml', version: '2.0'

configurations.all {
    exclude group: 'org.yaml'
    resolutionStrategy {
        force  "org.yaml"
    }
}
解决建议
  • 核心原因:SnakeYAML 2.x移除了SafeConstructor的无参构造函数,而你使用的Micronaut 3.7.1依赖的是SnakeYAML 1.x版本,版本不兼容导致报错。
  • 修正依赖配置:
    1. 移除SnakeYAML 2.0的依赖,改用Micronaut 3.x兼容的1.x版本(比如1.33,这是Micronaut 3.7.1默认依赖的版本)。
    2. 调整Gradle配置,正确强制指定兼容版本:
    configurations.all {
        resolutionStrategy {
            force 'org.yaml:snakeyaml:1.33'
        }
    }
    
    无需全局排除org.yaml,强制版本会覆盖所有依赖树中的冲突版本。
  • 验证依赖树:执行./gradlew dependencies(Gradle)或mvn dependency:tree(Maven),确认所有模块依赖的SnakeYAML都是1.33版本,没有2.x版本混入。
  • 清理构建缓存:删除项目的build目录、Gradle/Maven缓存,重新构建项目,避免旧的依赖文件残留导致冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:07:17