现象:
今天在给服务添加grpc接口的时候,查询hbase时突然报了如下错误:java.lang.NoClassDefFoundError:org.apache.hadoop.hbase.util.ByteStringer
问题分析:
1:在java中,出现NoClassDefFoundError时,一般都是jar冲突了,即依赖了同一个组件的不同版本,此时,需要把依赖树打出来看看,笔者用的是gradle,因此执行命令:
gradle appName:dependencies
果然,看下了protobuf存在2.5.0的版本和3.6.1的版本;hbase client中默认用的是2.5.0的版本,hbase2.0之前的版本都是依赖2.5.0的protobuf;
问题解决:
使用 hbase-shaded-client来替代 hbase-client
gradle 依赖如下:
compile "org.apache.hbase:hbase-shaded-client:1.4.8"
重新编译打包
gradle build
编译通过,再debug一下,通过,完美解决问题