关于基于arm架构的m1及m1以上芯片无法使用2.0以上版本nacos的解决方案
问题简述:最近在学习使用低代码平台工具Ruo Yi-Cloud(低代码平台微服务版本),项目基于nacos作为服务的注册中心,最新版本需要nacso需要2.0以上版本,下载最新版本nacos启动nacos报错截图如下:
报错核心问题信息如下:(mach-o file, but is an incompatible architecture (have ‘x86_64’, need ‘arm64e’)) ,
解决方案:
项目安利,若依低代码平台(微服务版):https://gitee.com/y_project/RuoYi-Cloud
解决方案核心:更换基于x86架构的jdk
以下阐述全部抄自于github
目前在使用 Apple M1,现在已经能够运行 nacos 服务,分享下一些实践经验。
M1 使用 zulu JDK
编译会碰到如下错误,依赖关系为 nacos -> jraft -> rocksdb5.x
,目前最新版的 rocks6.x
系列也暂未支持 M1 架构,但已有大神在尝试编译 mac 通用版本(x86 和 aarch64 通用),最近也有进度,见:facebook/rocksdb#7720
librocksdbjni14096835716120570872.jnilib: mach-o, but wrong architecture
虽然已经有 M1 架构的 rocksdb 民间编译版本:https://bintray.com/maryk/maven/rocksdbjni/6.17.0
但 jraft 依赖的 BloomFilter
在 rocks6.x 系列版本里发生了 Break Change,导致无法使用。
所以想要使用 zulu JDK 运行,还需要等待:
- rocksdb Mac 通用版本发行
- jraft 升级依赖,修复版本兼容问题
但这并不代表我们就只能干等了,还是有办法继续运行 rocksdb 的,只是要牺牲一些性能罢了:
Nacos 开发者:解决源码运行问题
直接看重点:使用 Oracle JDK 1.8 以上可以成功运行源码
优点:使用的 Rosseta 转译过的 Oracle JDK,几乎没啥兼容问题
缺点:性能回到上代 i5 ~i7 之间水平,启动时间相比 zulu JDK 延长 5 倍左右,但还可接受
Nacos 用户:解决服务运行问题
指定 JAVA_HOME 到 Oracle JDK,再运行官网下载的服务包即可,例如:
我们也可以直接将nacos的配置文件中jdk指向安装的基于x86的jdk路径即可
# JAVA_HOME 每台机器都不一样,请改成本机路径
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home \
&& sh startup.sh -m standalone
总结
其实,M1 的所有兼容问题,在没有 native 支持的版本出来之前,我们几乎都可以通过 rosseta 解决。
补充个大宝藏:
同时安装 x86 架构的 homebrew 和 arm 架构的 homebrew,保佑你安然渡过 M1 过渡期
[TIP | The BEST way to install Homebrew (Brew) on Apple Silicon (M1)]