业务需求
由于需要添加skywalking的支持,发现apm-spring-cloud-gateway-2.1.x-plugin-8.0.1.jar最高版本是2.1.x,所以需要把之前的依赖降级,因此引发的版本问题。
报的异常:
java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: reactor/netty/NettyPipeline$SendOptions
at org.springframework.cloud.gateway.filter.NettyRoutingFilter.lambda$filter$3(NettyRoutingFilter.java:134) ~[spring-cloud-gateway-core-2.1.5.RELEASE.jar:2.1.5.RELEASE]
......
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]
Caused by: java.lang.NoClassDefFoundError: reactor/netty/NettyPipeline$SendOptions
... 34 common frames omitted
分析引用的点:
-
看看spring-cloud-gateway-core-2.1.5.RELEASE.jar中NettyRoutingFilter是如何使用NettyPipeline.SendOptions的。
-
不同版本对比的发现
在版本spring.boot.version是2.1.6.RELEASE
中显示的依赖版本是reactor-netty:0.8.9.RELEASE
在版本spring.boot.version是2.2.5.RELEASE
中显示的依赖版本是reactor-netty-0.9.5.RELEASE
下面来看这两个包中NoClassDefFoundError: reactor/netty/NettyPipeline$SendOptions的原因是:
解决办法:
如果确定要引用:spring-cloud-gateway-core-2.1.5.RELEASE.jar
相应的springboot包依赖需要引用:<spring.boot.version>2.1.6.RELEASE</spring.boot.version>
如果确定要引用:spring-cloud-gateway-core-2.2.2.RELEASE.jar
相应的springboot包依赖需要引用:<spring.boot.version>2.2.5.RELEASE</spring.boot.version>