Gradle多模块Spring项目引入spring-boot-starter-webflux报reactor.netty错误
问题根因
核心问题是多模块项目中Spring Boot版本不统一:父项目Par声明使用Spring Boot 2.2.6.RELEASE,子项目Child又单独指定了Spring Boot 2.2.10.RELEASE的webflux依赖,导致最终运行的classpath中混杂了两个版本的Spring Boot核心类与依赖库,出现方法签名不匹配的兼容性问题。
Spring Boot 2.2.6和2.2.10对Reactor Netty的版本要求、内置NettyReactiveWebServerFactory类的实现逻辑存在差异,版本混杂后就会出现调用不存在方法的报错。
解决方案
按优先级从高到低选择即可:
- 方案一:统一全项目Spring Boot版本(最稳妥)
将父项目Par中Spring Boot插件的版本升级为2.2.10.RELEASE,删除子项目Child中单独声明的spring_boot版本变量,所有Spring Boot相关依赖统一继承父项目的版本配置,从根源避免版本冲突。 - 方案二:对齐子项目依赖版本和父项目
如果暂时无法升级父项目的Spring Boot版本,将子项目中spring-boot-starter-webflux的版本改为和父项目一致的2.2.6.RELEASE,移除子项目单独指定的版本号即可。 - 方案三:强制子项目依赖版本覆盖父项目仲裁
如果确实需要在子项目单独使用2.2.10版本的Spring Boot组件,在子项目的build.gradle中添加版本强制规则,覆盖父项目的依赖仲裁:configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> // 强制所有Spring Boot依赖使用子项目指定的2.2.10版本 if (details.requested.group == 'org.springframework.boot') { details.useVersion versions.spring_boot } // 强制Reactor全家桶使用适配Spring Boot 2.2.10的版本序列 if (details.requested.group == 'io.projectreactor') { details.useVersion 'Dysprosium-SR13' } } }
内容的提问来源于stack exchange,提问作者lightrek
相关产品推荐
相关产品推荐

