java.lang.reflect.InvocationTargetException java.lang.NoClassDefFoundError:
阿新 • • 發佈:2019-01-25
maven專案debug的時候,加斷點除錯遇到下面的錯誤:
java.lang.reflect.InvocationTargetException
java.lang.NoClassDefFoundError: org/apache/spark/sql/types/DataType
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出的問題。
當然每個報錯都有不同的原因,我這個寫出來,權當參考。