Protobuf 版本冲突解决
程序员文章站
2022-05-19 14:47:31
...
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
下一篇: Nginx+PHP-FPM运行原理
推荐阅读
-
附加到SQL2012的数据库就不能再附加到低于SQL2012的数据库版本的解决方法
-
Mysql数据库从5.6.28版本升到8.0.11版本部署项目时遇到的问题及解决方法
-
如何在vue里面优雅的解决跨域(路由冲突问题)
-
php多用户读写文件冲突的解决办法
-
电脑硬件资源的冲突与解决方法
-
MySql版本问题sql_mode=only_full_group_by的完美解决方案
-
jquery1.8版本使用ajax实现微信调用出现的问题分析及解决办法
-
快速解决docker-py api版本不兼容的问题
-
Android Studio Gradle依赖冲突解决方法
-
12306数据泄露行程冲突的火车票被退票了的解决办法