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版本,版本不兼容导致报错。 - 修正依赖配置:
- 移除SnakeYAML 2.0的依赖,改用Micronaut 3.x兼容的1.x版本(比如1.33,这是Micronaut 3.7.1默认依赖的版本)。
- 调整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
相关产品推荐
相关产品推荐

