struts2升级异常

问题描述:

升级struts2,由2.1.8升级成2.5.26,启动项目出现异常

2021-03-31 14:37:04.345 [] ERROR (convention.DefaultClassFinder.<init>:95) [] - Unable to read class [com.u8.server.web.activity.ysdk.Partition]
java.lang.IncompatibleClassChangeError: class org.apache.struts2.convention.DefaultClassFinder$InfoBuildingVisitor has interface org.objectweb.asm.ClassVisitor as super class
	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.7.0_80]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:800) ~[?:1.7.0_80]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.7.0_80]
	at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:3251) ~[catalina.jar:7.0.96]
	at 

原因分析:

这里重点主要看这句:

java.lang.IncompatibleClassChangeError: class org.apache.struts2.convention.DefaultClassFinder$InfoBuildingVisitor has interface org.objectweb.asm.ClassVisitor as super class

表达的是ClassVisitor是一个接口,但被struts2.convention用成了父类。

struts2.convention是struts2-convention-plugin-2.5.26.jar使用的类

ClassVisitor是asm.jar的元素,旧版本中ClassVisitor是一个接口,新版本改成了一个类

随着struts2的更新,struts2-core-2.5.26.jar会自带新版本asm-7.3.1.jar。不会有旧版本问题。

执行“mvn dependency:tree”命令,分析项目的依赖包结构,发现项目中依赖的cglib-2.2.jar依赖了asm-3.1.jar
在这里插入图片描述
推断出是旧版本cglib引用了旧版本的asm的原因

解决方案:

把cglib升级成cglib-3.3.0.jar,查看已经没有依赖asm
在这里插入图片描述
再次启动项目,成功,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值