M1 Mac+OpenJDK11环境下Proto代码生成失败问题求助
解决方案:M1 Mac下使用protoc 3.3.0生成代码的兼容问题
问题根源
protoc 3.3.0版本未提供**osx-aarch_64(M1/M2等ARM架构)**的预编译二进制包,而Intel Mac会自动匹配osx-x86_64的包,因此同事使用相同配置无问题。
可行解决方案
1. 强制指定x86_64架构的protoc包
在项目的pom.xml中,直接覆盖架构属性,让Maven下载x86_64版本的protoc,通过Rosetta转译运行:
<properties> <os.detected.classifier>osx-x86_64</os.detected.classifier> </properties>
或者直接修改插件的protocArtifact配置,硬编码架构:
<protocArtifact> com.google.protobuf:protoc:3.3.0:exe:osx-x86_64 </protocArtifact>
2. 本地安装protoc 3.3.0并指定可执行文件
- 手动下载protoc 3.3.0的osx-x86_64预编译包,解压后将
protoc可执行文件放到本地路径(比如/usr/local/bin/protoc) - 修改Maven插件配置,替换
protocArtifact为本地执行文件路径:
<configuration> <!-- 移除原有的protocArtifact配置 --> <protocExecutable>/usr/local/bin/protoc</protocExecutable> <pluginId>grpc-java</pluginId> <pluginArtifact> io.grpc:protoc-gen-grpc-java:1.4.0:exe:${os.detected.classifier} </pluginArtifact> <clearOutputDirectory>false</clearOutputDirectory> </configuration>
注:protoc-gen-grpc-java 1.4.0同样没有osx-aarch_64包,因此也可以用同样方法指定本地x86_64版本,或者同样强制classifier为osx-x86_64。
3. 通过Rosetta运行Maven
- 找到终端应用,右键选择「显示简介」,勾选「使用Rosetta打开」
- 在这个终端窗口中执行Maven编译命令(如
mvn clean compile),此时Maven会以x86_64架构运行,自动匹配osx-x86_64的包,无需修改配置。
内容的提问来源于stack exchange,提问作者Sominda Gamage
相关产品推荐
相关产品推荐

