Protobuf 版本衝突解決

1. 問題簡述

  1. 因協議更改的需要,在項目中使用 protobuf 重新編譯更改後的.proto 文件,生成對應的 Java 類文件後整編項目時出現錯誤,報錯信息是無法加載某個類之類的。一般這種情況都是項目 jar 包引入不正確導致,檢查項目 protobuf 依賴,發現其版本爲3.3.1

    在這裏插入圖片描述

  2. 使用以下命令檢查本地的 protobuf 版本,發現本地版本爲 3.10.0,顯然 google 在 protobuf 版本迭代過程中肯定進行了較大的修改,高版本的 protobuf 編譯生成的 Java 類文件中出現了低版本 jar 包中不支持的類

    protoc --version
    

2. 解決方法

  1. 通常可以直接在 build.gradle 文件中修改 protobuf 的依賴版本,但是該項目中並沒有看到任何顯式聲明 protobuf 依賴的代碼,通過 gradle 編譯依賴分析發現這個包是包含在其他依賴中引入進來的。此時想到的是 在 build.gradle 文件中重新添加一個高版本的 protobuf 依賴,這種方式編譯沒有問題,但是引入高版本依賴後出現了jar包衝突,原本未改動的protobuf對應 Java 類文件在 IDEA 中出現紅色報錯,無法正確導入到其他類中使用

  2. 無奈之下只想到一個解決方法,那就是重裝本地 protobuf,使用低版本的 protobuf 重新編譯生成 Java 類文件。以下爲 Mac 環境相關命令,如未安裝 brew 請參考另一篇博客 Mac 環境 protobuf 安裝

    // 卸載本地 protobuf
    brew uninstall protobuf
    
    // 重新搜索 protobuf 可用版本
    brew search protobuf
    
    // 安裝指定版本
    brew install protobuf@3.6
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章