java服务启动报错:
nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.Si
mpleAnnotationMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(Cl
assPathScanningCandidateComponentProvider.java:237)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.j
ava:204)
at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionPar
ser.java:84)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDel
egate.java:1335)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDel
egate.java:1325)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDef
initionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBean
DefinitionDocumentReader.java:93)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader
报错信息中可以仔细看如下:
class org.springframework.core.type.classreading.SimpleAnnotationMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
可以重点看 ClassVisitor 这个信息,应该是jar包冲突的原因。因为看错误信息,ClassVisitor应该是有个同包同名的一个接口和一个类。
定位到jar冲突那就排查哪些jar冲突了。查看服务所有的jar包。
发现有spring-asm-3.0.5的jar包。打开这个jar看到ClassVisitor是个接口
jar包太多,无法逐一排查,看报错提示包名应该也是org.springframework.asm 。应该也是spring相关的jar有冲突了。继续查看所有spring相关jar。发现有2个高版本的spring相关jar。将他们down下来查看一下。
在5.2.11包中同包同名的ClassVisitor是一个类
找到冲突的jar了,接下来就是排除相关的jar。排除后应该就能解决此问题了
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>