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

Maven构建成功但proto文件未生成Java gRPC Stubs类求助

gRPC Java类生成失败问题根因与修复方案

核心问题点

  • 当前配置使用的protoc-jar-maven-plugin版本为3.11.4,发布时间早于Apple M1芯片上市时间,未适配ARM架构,会出现protoc二进制静默拉取/执行失败、不生成代码但Maven构建判定成功的兼容问题。
  • 现有插件配置未添加gRPC服务代码生成的相关参数,即便protoc正常执行,也只会生成消息对应的Java类,不会生成Greeter服务的存根实现类。
  • 插件未配置生成源码路径的自动挂载,即便代码生成成功,也不会被Maven纳入编译范围。
  • 将proto文件存放在src/main/resources目录不符合protobuf Maven插件的默认扫描规则,额外配置的输入路径在老版本插件的M1兼容模式下存在扫描失效问题。

修复步骤

  • 调整项目目录结构:新建src/main/proto目录,将原src/main/resources下的hello.proto移动到该目录下,proto文件内容不需要修改。
  • 替换原有老旧的protoc插件配置,将pom.xml中build/plugins下的protoc-jar-maven-plugin替换为原生支持M1架构的官方推荐插件配置:
<plugin>
    <groupId>org.xolstice.maven.plugins</groupId>
    <artifactId>protobuf-maven-plugin</artifactId>
    <version>0.6.1</version>
    <configuration>
        <!-- M1芯片原生ARM版本protoc,无需Rosetta转译 -->
        <protocArtifact>com.google.protobuf:protoc:${protoc.version}:exe:osx-aarch_64</protocArtifact>
        <pluginId>grpc-java</pluginId>
        <!-- M1芯片原生gRPC代码生成插件 -->
        <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:osx-aarch_64</pluginArtifact>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
                <goal>compile-custom</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  • 删除之前手动创建的org.abraxel.grpc空包,避免和自动生成的代码路径产生冲突。
  • 执行构建命令:
mvn clean compile

构建完成后,生成的消息类、gRPC服务存根类会分别存放在target/generated-sources/protobuf/java、target/generated-sources/protobuf/grpc-java路径下,插件会自动将这两个路径加入项目编译源路径,可直接在业务代码中引用。

补充说明:如果执行时提示找不到aarch64版本的二进制依赖,可以将上述配置里的osx-aarch_64替换为osx-x86_64,通过Mac系统自带的Rosetta 2转译运行x86版本的生成工具,功能完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:39:19