美文网首页
Protobuf,Jar冲突导致的请求异常

Protobuf,Jar冲突导致的请求异常

作者: VincentPeng | 来源:发表于2020-06-20 13:29 被阅读0次

    项目中使用了Grpc和阿里云日志
    访问RPC接口突然显示,没有权限访问AbstractMessage.memoizedSize属性,让后查看了项目中的依赖,发现存在2.5.0和3.11.0两个版本的protobuf-java

    java.lang.IllegalAccessError: class com.xxxx.xxx.xxx.api.xxxxxeParam tried to access private field com.google.protobuf.AbstractMessage.memoizedSize 
    

    问题点:

    aliyun的日志使用了
    排查这个问题其实没有花太多时间,主要在于确定是jar冲突这点上,应为使用的是gradle.kotlin 工程管理,开始打印项目依赖的时候显示没有使用2.5.0的jar包。就很矛盾,后来获取全局的依赖,才看到有了2.5.0的依赖

    排查过程

    1 确认问题是版本问题

    多个依赖版本
    • 2.5.0版本中 protobuf-java中AbstractMessage.memoizedSize


      2.5.0版本中memoizedSize是private
    • 3.11.0版本中 protobuf-java中AbstractMessage.memoizedSize


      3.11.0中memoizedSize是protected

    2 查看完整项目依赖

    查看项目依赖树:

    #项目根路径下:输出依赖树到deplog.txt文件
    gradle dependencies > deplog.txt
    

    依赖树部分内容如下:

    *号代表多版本;xx->xxx 标识版本覆盖

    3 排除低版本jar包

    修改依赖:build.gradle.kts

        implementation("com.aliyun.openservices:aliyun-log-log4j-appender:0.1.12"){
            this.exclude("com.google.protobuf","protobuf-java")
        }
    

    4 排除后调用正常!!

    相关文章

      网友评论

          本文标题:Protobuf,Jar冲突导致的请求异常

          本文链接:https://www.haomeiwen.com/subject/oviwxktx.html