问题描述
程序中使用ClientSideRegionScanner来并行的查询hbase,但是在获取ClientSideRegionScanner对象时,出现这个错误NoSuchMethodError org.google.common.base.Objects.ToStringHelper,本地使用的是guava-24.1-jre版本
出错原因
找到guava-24.1-jre下出错的类Objects,发现下面就只有两个方法
好像是因为guava在20.0以上的版本去掉了com.google.common.base.Objects中实现的内部类ToStringHelper,以及几个toStringHelper的方法,将其移到了同包下的MoreObjets中。低版本中Objects关于toStringHelper都是@Deprecated 不推荐使用
怎样解决
由于本地程序中还引用了guava-24.1-jre中的其他方法,不能轻易的更换版本。我的处理方式是直接从git上把guava源码拉下来,然后将低版本中删掉的代码增加到guava-24.1-jre的源码中,重新编译打包,最后程序运行成功,成功获取到hbase的ClientSideRegionScanner对象