【问题标题】:com/google/common/cache/RemovalCause java.lang.NoClassDefFoundErrorcom/google/common/cache/RemovalCause java.lang.NoClassDefFoundError
【发布时间】:2021-09-29 06:45:25
【问题描述】:

我正在使用 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:?]

【问题讨论】:

  • 你是如何创建 jar 的?通过maven?
  • @Renis1235 是的,但这有什么关系?
  • 每个建筑工具都有不同的配置。你能在你的IDE中运行你的程序吗?你的 IDE 是什么?
  • 您的依赖项之一是否包含 Guava? Guava 因具有重大变化而臭名昭著。
  • @Renis1235 是的,可以在 intellij ide 中运行

标签: java spring-boot guava


【解决方案1】:

尝试使用 IntelliJ 构建一个 fat Jar 并将所有依赖项放入其中。

就是这样:

  1. 转到项目设置和工件File-> Project Structure... -> Artifacts
  2. 点击+按钮添加工件
  3. 选择JAR -> From Module With dependencies
  4. 通过folder 按钮选择您的Main 班级
  5. 在创建的 Artifact 中单击,您将拥有如下内容:

  1. 右键选中所有元素然后放入输出根目录
  2. 确保您已将所有可用元素复制到您的 jar 中。
  3. 在您的项目根目录下创建一个 META-INF 文件夹,将其复制到您的资源文件夹。
  4. 点击上方上下文菜单中的Build,然后构建工件,然后构建您的工件。

祝你好运!

【讨论】:

  • 当前正在创建一个瘦 jar,并且所有 jar 都被复制到可以引用的 lib 目录中。所有其他罐子都正常工作,即使是这个罐子,但只是有一个类 RemovalCause 的问题。更改部署策略由另一个团队处理,因此无法更改。尽管如此,由于其他罐子没有面临这个问题,我相信构建不是问题。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 2018-05-26
    • 2023-03-12
    • 2016-04-20
    • 2016-11-23
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多