神奇解決NoClassDefFoundError版本不同的問題

banq發表於2018-11-11

你是否有碰到這個錯誤:

java.lang.NoClassDefFoundError: XXXXXX 

一般這是由同一個軟體不同版本導致,然後你會花幾個小時嘗試統一成一個版本後就解決了。

現在只要下載這個開源的工具depends,然後執行:

java -jar build/libs/depends-1.0-SNAPSHOT.jar com.mycompany.app:my-app:1.0-SNAPSHOT --filter=JsonParseException

你獲得一個有用的報告:

broken apis:
         com.fasterxml.jackson.core.JsonParseException.getMessage()Ljava/lang/String; is only present in 
        [com.fasterxml.jackson.core:jackson-core [2.9.3, 2.9.5, 2.9.4, 2.9.6]]

        com.fasterxml.jackson.core.JsonParseException.<init>(Lcom/fasterxml/jackson/core/JsonParser;Ljava/lang/String;Ljava/lang/Throwable;)V is only present in 
        [com.fasterxml.jackson.core:jackson-core [2.9.3, 2.9.5, 2.9.4, 2.7.8, 2.9.6]]

        com.fasterxml.jackson.core.JsonParseException.<init>(Lcom/fasterxml/jackson/core/JsonParser;Ljava/lang/String;)V is only present in 
        [com.fasterxml.jackson.core:jackson-core [2.9.3, 2.9.5, 2.9.4, 2.7.8, 2.9.6]]

        com.fasterxml.jackson.core.JsonParseException.<init>(Lcom/fasterxml/jackson/core/JsonParser;Ljava/lang/String;Lcom/fasterxml/jackson/core/JsonLocation;)V is only present in 
        [com.fasterxml.jackson.core:jackson-core [2.9.3, 2.9.5, 2.9.4, 2.7.8, 2.9.6]]



從列表中選擇一個版本!

下載方式:
  1. git clone https://github.com/bgard6977/depends.git
  2. ./gradlew build

工作原理:
  1. 它使用ShrinkWrap Resolver構建專案的依賴關係圖。
  2. 它掃描每個jar中的類,並使用ASM4查詢函式呼叫。
  3. 它構建了所有跨模組函式呼叫的對映。
  4. 它假設從外部模組呼叫的任何函式都是公共API。
  5. 它會比較每個模組的所有版本,以檢視所有版本中不存在哪些方法。
  6. 它按給定的搜尋詞過濾這些內容。
  7. 最後,它列印一份報告,以幫助您確定在依賴性衝突產生時使用的版本。

相關文章