不要輕易在java ext 目錄放任何三方jar包


今天在編寫一個簡單spi 應用demo的時候,在編譯時總有一個其他的錯誤,如下:

 ERROR Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project userloginspi: Fatal error compiling: java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.toImmutableSet()Ljava/util/stream/Collector; -> [Help 1] (org.apache.maven.cli.MavenCli:1091)

因為這個插件一直使用 ,而且類似的代碼也寫過不可能出問題的,首先懷疑的是maven 工具,但是發現沒問題,這個錯誤的提示實際上是一個guava 包版本的問題,但是項目依賴的guava 已經包含功能了,而且很高了,嘗試過以下幾個調試

解決流程

  • maven 構建提啟用調試
    添加-X 發現依賴的包包含代碼,沒有問題
  • 只能google了
    大家的說法都是guava 版本,突然看到有人說,guava 已經在classpath了,實際上錯誤也符合,然后突然想起,當時為了測試yugabytedb 的cdc 功能
    在ext 目錄copy 了一個jar 包,因為guava 包在java 開發中如此的方便,基本都會依賴的,刪除jar包 ,重新運行問題解決

說明

一般放置三方jar 包到java 的ext 目錄,仔細閱讀下jar包實現的功能吧,不然排查起來問額就太費事了,折騰了好幾個小時,還好最后解決了。
一個經驗教訓:不要輕易在java ext 目錄放任何三方jar包

參考資料

https://stackoverflow.com/questions/52363536/java-lang-nosuchmethoderror-com-google-common-collect-immutablesortedset-toimmu/52363643


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM