簡體   English   中英

com/google/common/cache/RemovalCause java.lang.NoClassDefFoundError

[英]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:?]

嘗試使用 IntelliJ 構建一個胖 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在上面的上下文菜單,然后建立工件,然后建立自己的神器。

祝你好運!

發現,當應用程序正在啟動/關閉並且服務器是 tomcat 時,問題就會發生。 據報道,tomcat 上的類似問題是靜態類或枚舉在啟動期間或應用程序關閉時由類加載器卸載。 此外,由於大多數框架(如 spring)將在應用程序關閉時停止接受休息請求,因此,該問題可能僅發生在消息訂閱(kafka 或類似)或計划作業中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM