【问题标题】:IncompatibleClassChangeError: class ClassMetadataReadingVisitor has interface ClassVisitor as super classIncompatibleClassChangeError:类 ClassMetadataReadingVisitor 具有接口 ClassVisitor 作为超类
【发布时间】:2013-04-19 01:04:45
【问题描述】:

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

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

原因:java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor 具有接口 org.springframework.asm.ClassVisitor 作为超类

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

【问题讨论】:

标签: java spring-mvc maven-3


【解决方案1】:

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

看起来在加载时上述类的不同版本正在您的案例中加载。

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

请使用 maven dependency:tree 命令查看依赖的 jars。

【讨论】:

  • 是的,我看到了不同版本的弹簧罐。 mongodb 依赖项正在提取最新的 jars。我应该如何解决这个问题?
  • 由于 mongo 依赖项需要最新的 spring,因此您也增加了 spring 依赖项。但是你说它过去曾经工作过,这意味着可能是 mongo jars 没有为它的 spring 依赖定义任何版本,所以自动拉到了最新的版本。检查 mongo jars pom。
  • 感谢您的指点。是的,它的 mongo jars 没有定义版本依赖项。目前我使用的是最新的 spring 版本。
【解决方案2】:

在 spring 版本 > 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

【讨论】:

  • 它帮助我删除了cglib,这取决于asm。
【解决方案3】:

此错误通常在使用不兼容的 jar 版本时出现,例如 spring-asm 和 spring-core。看看forum.springsource.org/showthread.php?133341

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,并通过从 pom.xml 中删除我的 spring-data-jpa 依赖项来面对它

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

    【讨论】:

      【解决方案5】:

      更新至高于 3.1.x 版本的用户...this answer here 明确指出,不再有单独的 spring-asm,因此最好完全排除 spring-asm,一旦你在春季版 3.2.x

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-17
        • 1970-01-01
        • 2012-01-29
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多