Protobuf,Jar沖突導(dǎo)致的請(qǐng)求異常

項(xiàng)目中使用了Grpc和阿里云日志
訪問(wèn)RPC接口突然顯示,沒(méi)有權(quán)限訪問(wèn)AbstractMessage.memoizedSize屬性,讓后查看了項(xiàng)目中的依賴,發(fā)現(xiàn)存在2.5.0和3.11.0兩個(gè)版本的protobuf-java

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

問(wèn)題點(diǎn):

aliyun的日志使用了
排查這個(gè)問(wèn)題其實(shí)沒(méi)有花太多時(shí)間,主要在于確定是jar沖突這點(diǎn)上,應(yīng)為使用的是gradle.kotlin 工程管理,開(kāi)始打印項(xiàng)目依賴的時(shí)候顯示沒(méi)有使用2.5.0的jar包。就很矛盾,后來(lái)獲取全局的依賴,才看到有了2.5.0的依賴

排查過(guò)程

1 確認(rèn)問(wèn)題是版本問(wèn)題

多個(gè)依賴版本
  • 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 查看完整項(xiàng)目依賴

查看項(xiàng)目依賴樹(shù):

#項(xiàng)目根路徑下:輸出依賴樹(shù)到deplog.txt文件
gradle dependencies > deplog.txt

依賴樹(shù)部分內(nèi)容如下:

*號(hào)代表多版本;xx->xxx 標(biāo)識(shí)版本覆蓋

3 排除低版本jar包

修改依賴:build.gradle.kts

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

4 排除后調(diào)用正常??!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容