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出的问题。
当然每个报错都有不同的原因,我这个写出来,权当参考。