1. 問題簡述
-
因協議更改的需要,在項目中使用 protobuf 重新編譯更改後的
.proto 文件
,生成對應的 Java 類文件後整編項目時出現錯誤,報錯信息是無法加載某個類之類的。一般這種情況都是項目 jar 包引入不正確導致
,檢查項目 protobuf 依賴,發現其版本爲3.3.1
-
使用以下命令檢查本地的 protobuf 版本,發現本地版本爲
3.10.0
,顯然 google 在 protobuf 版本迭代過程中肯定進行了較大的修改,高版本的 protobuf 編譯生成的 Java 類文件中出現了低版本 jar 包中不支持的類protoc --version
2. 解決方法
-
通常可以直接在 build.gradle 文件中修改 protobuf 的依賴版本,但是該項目中並沒有看到任何顯式聲明 protobuf 依賴的代碼,通過 gradle 編譯依賴分析發現這個包是包含在其他依賴中引入進來的。此時想到的是
在 build.gradle 文件中重新添加一個高版本的 protobuf 依賴,這種方式編譯沒有問題,但是引入高版本依賴後出現了jar包衝突,原本未改動的protobuf對應 Java 類文件在 IDEA 中出現紅色報錯,無法正確導入到其他類中使用
-
無奈之下只想到一個解決方法,那就是
重裝本地 protobuf
,使用低版本的 protobuf 重新編譯生成 Java 類文件。以下爲 Mac 環境相關命令,如未安裝 brew 請參考另一篇博客 Mac 環境 protobuf 安裝// 卸載本地 protobuf brew uninstall protobuf // 重新搜索 protobuf 可用版本 brew search protobuf // 安裝指定版本 brew install protobuf@3.6