首页 > 解决方案 > 启动我的应用程序时出现 IncompatibleClassChangeError

问题描述

当我尝试在 Amazon Linux 机器上启动我的应用程序时出现以下错误。

Caused by: java.lang.IncompatibleClassChangeError: class com.google.common.cache.CacheBuilder$3 has interface com.google.common.base.Ticker as super class
        at java.lang.ClassLoader.defineClass1(Native Method)

标签: javamavendeploymentguava

解决方案


该错误意味着字节码CacheBuilder应该Ticker是一个 Java 类,但它是一个接口。

您在类路径上有两个版本的 Guava,或者您正在使用与您以前构建的不同版本的 Guava 启动应用程序。

尝试mvn dependency:tree查找重复项。如果看起来不错,请在 VM 上运行应用程序时检查类路径。

在极少数情况下,有人可能很“聪明”并将com.google.common.base.Ticker(或CacheBuilder)的字节码复制到他们的 JAR 中。尝试对所有 JAR 进行文本搜索以查找候选人或编写单元测试以打印结果

getClass().getClassLoader().getResources("com/google/common/base/Ticker.class");

看看谁喜欢贡献(应该只返回一个 URL)。如果可行,请对CacheBuilder.


推荐阅读