记一次javassist引发的异常

    技术2022-07-11  139

    最近做高危组件检测,在升级完项目里的一些高危包后,本地环境启动正常,部署测试环境出现以下错误:

    Caused by: java.io.IOException: invalid constant type: 18 at javassist.bytecode.ConstPool.readOne(ConstPool.java:1027) ~[javassist-3.11.0.GA.jar:?] at javassist.bytecode.ConstPool.read(ConstPool.java:970) ~[javassist-3.11.0.GA.jar:?] at javassist.bytecode.ConstPool.<init>(ConstPool.java:127) ~[javassist-3.11.0.GA.jar:?] at javassist.bytecode.ClassFile.read(ClassFile.java:716) ~[javassist-3.11.0.GA.jar:?] at javassist.bytecode.ClassFile.<init>(ClassFile.java:103) ~[javassist-3.11.0.GA.jar:?] at javassist.CtClassType.getClassFile2(CtClassType.java:190) ~[javassist-3.11.0.GA.jar:?] ... 58 more

    org.javassist:javassist:3.18.1-GA 一时纳闷,同样的几个微服务,同样的修改方式,为何这个项目出现此错误。百度后发现大多数都是说javassist的问题(https://blog.csdn.net/rchm8519/article/details/48698937),但检查项目的包里的版本确实是在3.18以上。后来才注意到升级的一个strutsstruts2-json-plugin包里有一个javassist-3.11.0.GA.jar没有排除掉,导致打包部署时出现了两个版本的javassist。 其实看报错的原因里就已经显示用的包是javassist的低版本了,只是当时没有太注意。 刚又发现,javassist-3.11.0.GA.jar和org.javassist:javassist:3.18.1-GA的maven还不一样。排除javassist-3.11.0.GA.jar的依赖是这个:

    <exclusion> <groupId>javassist</groupId> <artifactId>javassist</artifactId> </exclusion>

    (最开始把groupId写成了org.javassist)

    Processed: 0.021, SQL: 9