【问题标题】:Tomcat 7 to Tomcat 8 migration: IncompatibleClassChangeError: Found class org.objectweb.asm.AnnotationVisitorTomcat 7 到 Tomcat 8 迁移:IncompatibleClassChangeError: Found class org.objectweb.asm.AnnotationVisitor
【发布时间】:2016-10-20 10:24:53
【问题描述】:

我面临以下问题。使用已编译的软件,我尝试在 Tomcat 8 而不是 Tomcat 7 上启动它。解决了一些小问题后,我陷入了困境:

org.springframework.beans.factory.BeanCreationException: 使用名称创建 bean 时出错... init 方法调用失败;嵌套异常是 java.lang.IncompatibleClassChangeError: Found class org.objectweb.asm.AnnotationVisitor, but interface is expected

看了一圈,好像是来自 Spring 版本的差异。麻烦的是我根本没有接触这里的应用程序。 Tomcat 7 和 Tomcat 8 启动完全相同的程序。

能否请教您解决问题的建议?

【问题讨论】:

  • 类加载顺序可能会在不同版本之间发生变化。显然,您的应用程序中混合了 jars。
  • 感谢您对此进行调查。你将如何开始跟踪它。混合 jars 意味着指向不同的 Spring 还是什么?
  • 是的...检查您的依赖项(最终在战争中结束的实际依赖项)。
  • 我现在前进了一步。您的提示使我更接近解决方案,谢谢!我不再有这个错误,但由于我不知道的原因,应用程序还没有正常启动。一旦我知道出了什么问题,我会在这里分享经验。

标签: spring migration tomcat7 tomcat8


【解决方案1】:

在调查问题的路上我了解到这张票:https://bz.apache.org/bugzilla/show_bug.cgi?id=57129

它看起来像 Tomcat 8,而不是早期的 Tomcat 版本不按字母顺序加载类。在我的项目中,它导致了一个问题,因为库在使用的地方持有不同版本的 asm。

注意:在上面的票中 - 提升到 apache,有人将解决方法链接到 https://github.com/openwide-java/tomcat-classloader-ordered。不过,对我来说,它不起作用。

最后,我们不得不完成一项复杂的工作,即移除依赖项并修复项目,使其仅依赖于一个 lib 版本。

祝所有在类似问题上苦苦挣扎的人好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2019-04-29
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2015-04-02
    相关资源
    最近更新 更多