今天同事(不是我哈)切了一个分支写项目的时候,发现项目启动不起来了,然后也没有日志,我就看了下,在springboot 内置tomcat 的StandardService 的几个重要方法内打了断点,发现了抛了一个异常:
java.io.IOException: invalid constant type: 18 , 搜索了一番发现说是java lamda8 导致,问了同事是否使用了java8 ,emm..... 确实使用了,是一个涉及调用本地so库的函数表达式(此处不方便放源码)。
这种情况一般和 javassist 有关系,排查了一番,dubbo 中自动引入的版本比较低,作出如下改动
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<exclusions>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>
好吧,启动成功了, 那javassist 是干嘛的呢? 就是动态生成字节码 的一个类库,那为什么会出现这样的异常呢? 原因是写的方法是在dubbo 执行的provider 中执行的, 那就需要相关的动态生成字节码,而dubbo 又是依靠javassist 来做相关的工作的,所以就出现了上述的问题。 如若再想深入,请百度下哈!
感谢观看~

3133

被折叠的 条评论
为什么被折叠?



