項(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")
}

