You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级protobuf-java-util至4.26.0后JsonFormat.merge编译报错求助

Protobuf 3.x升级到4.x编译错误原因及解决方法

编译错误核心原因

你遇到的编译问题本质是版本不兼容导致的类型匹配失败,具体分为两点:

  1. 依赖版本不一致:仅升级protobuf-java-util到4.26.0,但未同步升级protobuf-java依赖,或生成Selection类的protoc编译器仍为3.x版本。4.x对Protobuf核心API做了重构,3.x生成的Selection.Builder与4.xprotobuf-java-util中要求的com.google.protobuf.Message.Builder类型结构不匹配,导致类型转换失败。
  2. API继承体系变更:Protobuf 4.x调整了生成代码的继承结构,3.x生成的Builder类不再兼容4.x版本中JsonFormat.Parser.merge方法的参数类型要求。

解决步骤

  • 统一所有Protobuf依赖版本:确保protobuf-java和protobuf-java-util版本完全一致,都升级到4.26.0:
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>4.26.0</version>
</dependency>
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java-util</artifactId>
    <version>4.26.0</version>
</dependency>
  • 重新生成Protobuf Java代码:使用4.26.0版本的protoc编译器重新编译所有.proto文件,生成与4.x依赖兼容的Java类(包括Selection.Builder)。

  • 临时兼容方案(不推荐长期使用):若暂时无法重新生成代码,可尝试显式类型转换规避错误:

Selection.Builder selectionBuilder = Selection.newBuilder();
JsonFormat.parser().ignoringUnknownFields().merge(selectionJson, (com.google.protobuf.Message.Builder) selectionBuilder);

内容的提问来源于stack exchange,提问作者Jochen Hebbrecht

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:55:00