JavaAPI操作phoenix-thin-client报错

Exception in thread “main” java.lang.NoSuchMethodError: org.apache.calcite.avatica.proto.Requests$CatalogsRequest.parser()Lorg/apache/phoenix/shaded/com/google/protobuf/Parser;

报错信息

在使用JavaAPI连接phoenix-thin-client并新增记录时报错, 报错截图如下:

JavaAPI操作phoenix-thin-client报错_第1张图片

报错原因

phoenix-thin-client的org.apache.calcite.avatica.proto.Requests$CatalogsRequest调用parser()方法时找不到对应的org/apache/phoenix/shaded/com/google/protobuf/Parser, 而调用了其他依赖的com/google/protobuf/Parser而报错,也就是依赖冲突问题

解决方法

找到了问题, 解决也就很轻松了

思路①

把你导入的依赖中内含有org/apache/phoenix/shaded/com/google/protobuf/Parser的依赖注释掉就好了

我这里列出我的, 把这两个依赖注释或者删除就可以了→hive-exechive-hbase-handler, 删完记得刷新一下依赖, 不然等于没有删除

<dependency>
    <groupId>org.apache.hivegroupId>
    <artifactId>hive-execartifactId>
    <version>${hive.version}version>
dependency>
<dependency>
  <groupId>org.apache.hivegroupId>
  <artifactId>hive-hbase-handlerartifactId>
  <version>${hive.version}version>
dependency>

JavaAPI操作phoenix-thin-client报错_第2张图片

OK, 问题解决!

思路②

如果我项目里有其他程序要用到上面两个依赖怎么办?

因为maven导依赖时也是讲究先来后到的, 所以我们把phoenix-thin-client依赖放到前面就会优先调用自己的依赖了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G5b8KlON-1609524150076)(Phoenix连接HBase.assets/image-20210102014635386.png)]

赖了
JavaAPI操作phoenix-thin-client报错_第3张图片

不过我还是不推荐这种方法, 因为这样很可能导致新的错误, 比如使用hive-exec的依赖时又调用到phoenix-thin-client的org/apache/phoenix/shaded/com/google/protobuf/Parser都是有可能的, 最好的解决方案还是直接删除或者注释掉

你可能感兴趣的:(报错信息,#java,java,hbase,bug,jdbc,maven)