java - 启动我的应用程序时出现 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)
解决方案
该错误意味着字节码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
.
推荐阅读
- docker - jwilder/nginx-proxy:无法访问虚拟主机
- c# - 将 HTTP/2 与 flurl 一起使用
- php - 在prticuler id的表中插入数据
- cucumber - 使用 selenium 处理数据驱动测试的最佳方法是什么?
- javascript - 如何创建只有 index.html、style.css 和 script.js 文件的博客?
- testing - 在 vuetify 单元测试中让(模拟的)转换尽快在 v-menu 内完成
- java - Java 可以取消引用语句吗?
- javascript - HTML、Canvas 和 WebGL 之间的质量差异
- python - 我的情节不是从原点开始如何解决它
- javascript - 我的 React 项目中可能缺少什么 CSS 样式没有应用于我的组件?