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
相关产品推荐
相关产品推荐

