升级原因
因为一些原因需要升级项目jdk版本从1.7 升级到 1.8. 但是当前项目使用的是spring3.x 版本,并不兼容jdk1.7版本。所以需要升级为4.x版本的spring。
遇到的问题
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [./xxxx.class]; nested exception is org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn’t supported yet: file [./xxxx.class]; nested exception is java.lang.IllegalArgumentException
- 这个产生的原因就是jdk版本跟你的spring版本不兼容。所以需要从spring 3升级到spring 4
<spring-version>3.2.3.RELEASE</spring-version>
改为
<spring-version>4.1.7.RELEASE</spring-version>
org.springframework.web.context.ContextLoader initWebApplicationContext 331 Context initialization failed java.lang.RuntimeException: java.io.IOException: invalid constant type: 15
- 这个产生的原因是因为dubbo中依赖的javassist包的版本问题。所以我们要移除dubbo中的依赖。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<scope>compile</scope>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>javassist</artifactId>
<groupId>org.javassist</groupId>
</exclusion>
</exclusions>
</dependency>
再加上
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [spring/spring.xml]; nested exception is java.lang.NoSuchMethodError: org.springframework.aop.config.AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(Lorg/springframework/beans/factory/xml/ParserContext;Ljava/lang/Object;)V org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [spring/spring.xml]; nested exception is java.lang.NoSuchMethodError: org.springframework.aop.config.AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(Lorg/springframework/beans/factory/xml/ParserContext;Ljava/lang/Object;)V
遇到这个问题首先要检查你有没有安装spring-aop的依赖。如果没有那么添加即可。
如果安装了spring-aop的依赖还是这个错误,那么检查一下是否有spring-dao的依赖。如果有,移除spring-dao依赖即可。
原因是因为通过搜索TransactionInterceptor这个类,会发现会出现两个结果分别在spring-dao 和 spring-aop中。spring-dao会覆盖spring-aop。所以移除spring-dao即可解决。