天天看點

Protobuf 版本沖突解決1. 問題簡述2. 解決方法

文章目錄

  • 1. 問題簡述
  • 2. 解決方法

1. 問題簡述

  1. 因協定更改的需要,在項目中使用 protobuf 重新編譯更改後的

    .proto 檔案

    ,生成對應的 Java 類檔案後整編項目時出現錯誤,報錯資訊是無法加載某個類之類的。

    一般這種情況都是項目 jar 包引入不正确導緻

    ,檢查項目 protobuf 依賴,發現其版本為

    3.3.1

    Protobuf 版本沖突解決1. 問題簡述2. 解決方法
  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 [email protected]
               

繼續閱讀