IncompatibleClassChangeError:class ClassMetadataReadingVisitor具有接口ClassVisitor作为超类

时间:2013-04-25 08:13:57

标签: java spring-mvc maven-3

我使用spring-mvc和mongodb作为数据库构建了一个Web应用程序。我使用maven3来构建应用程序。

项目构建成功,但是当应用程序启动时,我在日志中收到以下错误,因为我的应用程序无法启动。这曾经在几个月前开始工作。

  

引起:java.lang.IncompatibleClassChangeError:class   org.springframework.core.type.classreading.ClassMetadataReadingVisitor   将org.springframework.asm.ClassVisitor接口作为超类

如果有任何指示或者你们需要更多信息,请告诉我。

5 个答案:

答案 0 :(得分:74)

当加载的类ClassMetadataReadingVisitor不遵守继承的抽象类或接口的合同,即ClassVisitor时,会发生此错误。

看起来在加载时,上述类的不同版本会在您的情况下加载。

你的应用程序中似乎有新的spring-core jar和旧的spring-asm jar。 ClassMetadataReadingVisitor类正在从 spring-core 加载ClassVisitor spring-asm 加载。

请使用maven dependency:tree命令查看相关的罐子。

答案 1 :(得分:41)

春季版> 3.2.0,您不再需要明确包含spring-asm,因为它已包含在spring-core中。

从构建定义中删除spring-asm,并确保spring-core在那里。

http://static.springsource.org/spring-framework/docs/current/spring-framework-reference/html/migration-3.2.html#migration-3.2-inline-asm

答案 2 :(得分:7)

当使用不兼容的jars版本时,通常会显示此错误,例如spring-asmspring-core。看看forum.springsource.org/showthread.php?133341

答案 3 :(得分:0)

我遇到了同样的问题,并通过从spring-data-jpa

删除pom.xml依赖关系来解决这个问题

它已包含在spring-core依赖项中。

答案 4 :(得分:0)

针对那些升级到3.1.x以上版本的用户的更新... this answer here已明确指出,不再有单独的spring-asm,因此最好将spring-asm完全排除在外,一旦您使用的是Spring 3.2.x版本