M1 Mac设备使用Quarkus构建原生镜像失败问题求助
问题根因说明
- 最初容器构建卡住是因为拉取的
quay.io/quarkus/ubi-quarkus-native-image:21.0-java11仅支持amd64架构,在M1(arm64)设备上靠QEMU转译运行效率极低,直接导致构建卡死。 - 本地构建后运行出现
killed报错核心原因有三个:- 你使用的Quarkus 1.13.7.Final版本过老,未适配Apple Silicon(M1)架构的原生镜像构建
- 安装的GraalVM 20.3.x版本对M1架构的兼容性存在缺陷
- 构建命令错误携带了
-Dnative-image.docker-build=true参数,本地非容器构建不需要该配置
解决方案
步骤1:升级Quarkus版本
将项目pom.xml中的Quarkus版本升级至2.0.0.Final以上,优先选择2.16.x LTS版本,该版本已完成M1架构原生构建的适配。
步骤2:更换适配M1的GraalVM版本
卸载原有GraalVM 20.3.x,重新安装适配arm64架构的GraalVM 17或21版本:
brew install --cask graalvm/tap/graalvm-ce-java17
后续JEnv配置、GRAALVM_HOME环境变量同步更新为新的GraalVM路径。
步骤3:移除未使用的依赖
根据构建日志的警告提示,你未配置JDBC数据源却引入了agroal、hibernate-orm等相关依赖,先从pom.xml中移除所有未使用的依赖项,避免多余逻辑导致原生镜像构建异常。
步骤4:执行正确的构建命令
本地非容器构建原生镜像时,移除docker-build相关参数,执行如下命令:
mvn clean package -Pnative -Dquarkus.native.native-image-xmx=6g
分配6G内存给native-image构建进程,避免内存不足导致构建或运行异常。
步骤5:异常排查
如果运行时仍出现killed报错,可打开Mac控制台的崩溃报告查看具体崩溃原因,若为GraalVM原生镜像不支持的反射、动态代理等逻辑,需要在项目中补充对应的Quarkus原生镜像元数据配置。
内容的提问来源于stack exchange,提问作者Viswanath
相关产品推荐
相关产品推荐

