1. 程式人生 > >java.lang.reflect.InvocationTargetException java.lang.NoClassDefFoundError:

java.lang.reflect.InvocationTargetException java.lang.NoClassDefFoundError:

maven專案debug的時候,加斷點除錯遇到下面的錯誤:
java.lang.reflect.InvocationTargetException
java.lang.NoClassDefFoundError: org/apache/spark/sql/types/DataType

對應的斷點除錯圖與斷點進去的異常捕獲兩圖:

百度了一大圈,未找到相應的解決辦法。

因為這個maven專案與另一個maven專案的程式碼幾乎完全一致,兩專案同時更新的一部分程式碼,增加了一個可以寫日誌的api。僅僅就這個專案報錯是為啥呢?

分析了一下,既然是ClassDefFoundError 且涉及到spark的sql的DataType,而且新增的程式碼恰巧是涉及到spark的程式碼,會不會是pom檔案與另一個可以成功執行的專案的版本不一致呢?

查詢工程的pom,對比spark、scala、HBase、Hive等的依賴配置,改了scala版本不一致的問題,發現未解決。

然後查詢程式碼執行報錯部分所在的module的pom檔案,發現與另外一個版本相比,該pom少了一個依賴:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_${scala.binary.version}</artifactId>
</dependency>
新增上去後,問題解決。

前後花了3個小時來查詢問題,斷點也不是萬能的,不能直接發現是pom出的問題。

當然每個報錯都有不同的原因,我這個寫出來,權當參考。