本人工作没多久,也算小白一枚,日常会维护几个公司的老项目,本次是领导让把老项目struts2升级,避免漏洞破坏.
由于之前没有做过jar包升级操作,所以还是蛮棘手的,碰到了挺多问题,在此记录一下,如果大家遇到同样问题,可以参考一下.
环境:jdk 1.8 , tomcat 8.5
maven坐标配置
<properties>
<struts.version>2.5.20</struts.version>
<spring.version>4.1.3.RELEASE</spring.version>
<slf4j.version>1.6.4</slf4j.version>
</properties>
<!-- struts2 start-->
<!-- 零配置 开启注解模式-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<!--引入Struts对JSON的支持-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<!--整合spring-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- struts2 end-->
web.xml中的过滤器改一下,改成以下这样,原来好像多了俩字母,忘记是什么了,你对比一下吧
然后启动tomcat,启动报错:
java.lang.NoSuchMethodError: org.springframework.aop.scope.ScopedProxyUtils.isScopedTarget(Ljava/lang/String;)Z
这个是因为spring-aop版本低
所以我把aop版本升级了一下
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
问题解决,继续运行,抛异常:
java.lang.IncompatibleClassChangeError: class org.apache.struts2.convention.DefaultClassFinder$InfoBuildingVisitor has interface org.objectweb.asm.ClassVisitor as super class
这个错误当时就是搞得我生活不能自理了,就是可能太依赖百度了,然后百度找了一天,倒是找到相同的错误,但是解决办法不是很具体,然后就挺难受的,最后找到了一个帖子类似的错误,照着改了一遍才解决的.
这个错误其实就是jar包冲突了,你项目中有两个asm.jar,不同的jar把它们依赖进来,版本不同,struts2选用了低版本的,但是低版本的这个jar中你要用的这个类是个接口,高版本里面是个类,所以你这样你先搜索这个类发现有三个
然后你查看一下自己的依赖
然后就右键点击这个低版本的
ok
就完事了,是不是想想感觉还挺简单的
然后再启动
这次是启动控制台并没有抛异常,但是登陆项目之后抛出异常:
java.lang.NoSuchMethodError: org.apache.commons.lang3.reflect.MethodUtils.getMethodsListWithAnnotation(Ljava/lang/Class;Ljava/lang/Class;ZZ)Ljava/util/List;
这个就需要升级commons-lang3的jar
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
然后这次启动就ok了.
升级完毕,单证是第一次升级这种东西总结一下就是解决问题的时候,百度依赖还是要依赖的,但是自己也要动脑子,自己翻译异常信息,分析异常信息,不能说全靠百度,百度不到解决办法就蒙圈,哈哈,就是这样