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

gRPC调用时出现Protobuf NoSuchMethodError问题求助

解决gRPC调用中Protobuf序列化的NoSuchMethodError问题

这个错误的核心原因是Protobuf版本不兼容:生成Java代码时使用的Protobuf版本,和项目运行时依赖的Protobuf版本不一致,导致运行时找不到GeneratedMessageV3$Builder.parseUnknownField方法。

下面是具体的解决步骤:

  • 统一所有Protobuf相关依赖的版本
    检查项目里的protobuf-java、grpc-protobuf、grpc-protobuf-lite等依赖,确保它们的版本完全匹配。比如用Maven的话,在dependencyManagement里锁定版本,避免不同依赖引入不同版本的Protobuf:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>3.21.12</version>
            </dependency>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-protobuf</artifactId>
                <version>1.56.1</version>
            </dependency>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-protobuf-lite</artifactId>
                <version>1.56.1</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    Gradle可以用bom来统一管理:

    implementation platform('io.grpc:grpc-bom:1.56.1')
    implementation 'io.grpc:grpc-protobuf'
    implementation 'com.google.protobuf:protobuf-java:3.21.12'
    
  • 重新生成Protobuf Java代码
    确保编译.proto文件的protoc版本和依赖版本一致,比如依赖用3.21.12,protoc也要用同版本。然后删除旧的生成代码,重新生成,避免残留旧版本的代码文件。

  • 排查并排除依赖冲突
    用Maven的mvn dependency:tree或者Gradle的./gradlew dependencies命令查看依赖树,找有没有第三方库偷偷引入了不同版本的Protobuf。如果有,直接排除掉:

    <dependency>
        <groupId>第三方库groupId</groupId>
        <artifactId>第三方库artifactId</artifactId>
        <exclusions>
            <exclusion>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  • 避免Lite版和标准版混用
    错误日志里出现了ProtoLiteUtils,说明用到了Lite版Protobuf。要确保:

    • 如果用grpc-protobuf-lite,生成代码时要加--java_out=lite:输出目录参数启用Lite模式。
    • 不要同时引入grpc-protobuf和grpc-protobuf-lite,二选一即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:25:23