首页 > 解决方案 > com/google/common/cache/RemovalCause java.lang.NoClassDefFoundError

问题描述

我正在使用 google guava 进行缓存,运行时能够找到 jar 中除 RemovalCause 之外的所有类,我使用 jar -tf 检查了该类是否存在于 jar 中,甚至重新部署以避免 jar 损坏情况。但仍然无法弄清楚这有什么问题?

threw exception com/google/common/cache/RemovalCause
java.lang.NoClassDefFoundError: com/google/common/cache/RemovalCause
    at com.google.common.cache.LocalCache$Segment.expireEntries(LocalCache.java:2595) ~[guava-30.1-jre.jar:?]
    at com.google.common.cache.LocalCache$Segment.runLockedCleanup(LocalCache.java:3452) ~[guava-30.1-jre.jar:?]
    at com.google.common.cache.LocalCache$Segment.preWriteCleanup(LocalCache.java:3434) ~[guava-30.1-jre.jar:?]
    at com.google.common.cache.LocalCache$Segment.put(LocalCache.java:2774) ~[guava-30.1-jre.jar:?]
    at com.google.common.cache.LocalCache.put(LocalCache.java:4181) ~[guava-30.1-jre.jar:?]
    at com.google.common.cache.LocalCache$LocalManualCache.put(LocalCache.java:4865) ~[guava-30.1-jre.jar:?]

标签: javaspring-bootguava

解决方案


发现,当应用程序启动/关闭并且服务器是 tomcat 时,问题就发生了。Tomcat 上的类似问题也有报告称,静态类或枚举在启动期间或应用程序关闭时由类加载器卸载。此外,由于大多数框架(如 spring)会在应用程序出现故障时停止接收休息请求,因此,该问题可能仅发生在消息订阅(kafka 或类似)或计划作业中。


推荐阅读