Spring报错 Failed to read candidate component class: file Caused by: java.lang.IncompatibleClassChange

今天写一个SpringMVC的小例子,遇到一个很怪异的问题。

先说说开发环境:IDEA+SpringMVC+Gradle
先看看我的build.gradle文件引入的包:

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.springframework', name: 'spring-core', version: '5.0.5.RELEASE'
    compile group: 'org.springframework', name: 'spring-beans', version: '5.0.5.RELEASE'
    compile group: 'org.springframework', name: 'spring-context', version: '5.0.5.RELEASE'
    compile group: 'org.springframework', name: 'spring-expression', version: '5.0.5.RELEASE'
    compile group: 'org.springframework', name: 'spring-web', version: '5.0.5.RELEASE'
    compile group: 'org.springframework', name: 'spring-webmvc', version: '5.0.5.RELEASE'
    compile group: 'org.springframework', name: 'spring-aop', version: '5.0.5.RELEASE'
    compile group: 'org.springframework', name: 'spring-asm', version: '3.1.4.RELEASE'
}

运行项目报错如下:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
....
Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
....

这里只列出关键的报错信息,其他信息就不贴出来了。搜索了一番发现原因如下:

  1. spring-asm版本和spring-core版本不一致导致。
  2. spring在4.x之后把spring-asm整合进了spring-core中。
    好吧,然后我就把build.gradle中的asm的依赖也就是下面这行删除了。
compile group: 'org.springframework', name: 'spring-asm', version: '3.1.4.RELEASE'

然后运行依然报错,这个就很诡异了,最终发现,即使你在build.gradle中移除了这一行,spring-asm这个jar包仍然在你的项目里面,你必须彻底删除。
如下,我在项目目录下搜索jar结尾的文件:
这里写图片描述
是不是很尴尬,搜索到删除asm的jar包即可解决问题。
希望这个方法可以帮助到大家。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页