排除snakeyaml后Spring Boot测试加载ApplicationContext失败怎么解决?
问题原因
你排除了snakeyaml依赖,但Spring Boot加载application.yml配置文件必须依赖这个库解析YAML格式,所以测试启动时加载配置文件失败,抛出找不到snakeyaml的异常。
解决方法
根据你的需求,有三种可行方案:
方案1:升级snakeyaml到安全版本(推荐)
既然是因为漏洞要处理,最优解不是排除,而是直接升级到修复漏洞的版本,Spring Boot会自动适配。在pom.xml中添加指定版本的snakeyaml依赖,覆盖默认版本:
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <!-- 选择修复了漏洞的版本,比如1.30及以上,适配Spring Boot 2.5.13 --> <version>1.30</version> </dependency>
同时移除spring-boot-starter-web中的exclusions配置,这样既修复了漏洞,又不影响YAML配置文件的加载。
方案2:将YAML配置文件改为properties格式
如果不需要YAML格式,把application.yml重命名为application.properties,并调整配置格式为properties语法,这样就不需要snakeyaml依赖,测试和应用都能正常启动。
比如原来的YAML配置:
spring: data: mongodb: uri: mongodb://localhost:27017/testdb
改成properties:
spring.data.mongodb.uri=mongodb://localhost:27017/testdb
方案3:测试环境单独引入snakeyaml依赖
如果生产环境确实不需要snakeyaml,只想在测试时临时引入,添加test scope的依赖:
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.30</version> <scope>test</scope> </dependency>
这样生产打包时不会包含该依赖,测试时能正常加载YAML配置文件。
内容的提问来源于stack exchange,提问作者Koushik J
相关产品推荐
相关产品推荐

