关于项目升级到Jdk8 遇到的问题ArrayIndexOutOfBoundsException:xxxxxx

时间:2022-03-03 20:48:21

首先是原理,由于很青睐Jdk8的Lambda表达式的功能,笔者尝试着把服务器的jdk环境换成jdk8,但是过程总不是一帆风顺,由于项目庞大,依赖甚广,有些jar包在jdk7可以用,在Jdk8出现问题。虽然说jdk是向下兼容的升级,但是类似于AOP ,javaassist,等对字节码操作的jar包,由于是建立在低版本的,升级的时候,难免会出现各种问题。

看本人的一个报错

java.lang.ArrayIndexOutOfBoundsException: 2888612
 at com.thoughtworks.paranamer.BytecodeReadingParanamer$ClassReader.readInt(BytecodeReadingParanamer.java:704)
 at com.thoughtworks.paranamer.BytecodeReadingParanamer$ClassReader.accept(BytecodeReadingParanamer.java:555)
 at com.thoughtworks.paranamer.BytecodeReadingParanamer$ClassReader.access$200(BytecodeReadingParanamer.java:315)
 at com.thoughtworks.paranamer.BytecodeReadingParanamer.lookupParameterNames(BytecodeReadingParanamer.java:102)
 at com.thoughtworks.paranamer.CachingParanamer.lookupParameterNames(CachingParanamer.java:76)
 at com.thoughtworks.paranamer.CachingParanamer.lookupParameterNames(CachingParanamer.java:68)

我直接截到目标的报错代码。这段代码刚好定位到paranamer-2.3.jar这个jar包。

根据猜测,本人只是按照规范的写了一段  list.stream.map(it->xxx) 也就是streamApi 的代码。居然出现问题。再定位到方法,看,基本可以断定方法是没有问题。应该是出在版本问题上。

BytecodeReadingParanamer

其实从类名也可以猜得出来,是字节码操作问题。

所以果断的更新jar包,问题消失,问题完美解决。

http://mvnrepository.com/artifact/com.thoughtworks.paranamer/paranamer/2.8


遇到相同问题的朋友可以尝试升级jar包的方法去解决