Mac M1运行groovysh遇"no jansi in java.library.path"问题求助
Mac M1 上 Groovy 4.0.8 groovysh 的 Jansi 架构兼容问题分析
问题本质
你遇到的核心问题是 Mac M1 的 arm64 架构与 Groovy 自带的 Jansi 原生库不兼容:
- Groovy 4.0.8 依赖的 Jansi 原生临时库(
libjansi-64-xxxx.jnilib)仅包含x86_64,i386架构,缺少 M1 所需的arm64,导致加载失败,触发"ANSI 将被禁用"的警告。 - 手动指定
jansi-2.4.0.jar到类路径能正常运行,因为该版本的 Jansi jar 本身内置了 arm64 架构支持,但 groovysh 的启动脚本在 Mac M1 环境下没有自动将 lib 目录下的 jansi jar 纳入默认类路径。
跨平台差异原因(Manjaro vs Mac M1)
- 在 Manjaro(x86_64 或适配的 arm64 版本)上,groovysh 的启动脚本能正确识别系统架构,自动将 lib 目录下的所有依赖(包括 jansi)加入类路径,同时 Jansi 的原生库匹配系统架构,因此无需额外配置。
- 而 Mac M1 的 arm64 环境下,Groovy 4.0.8 的启动脚本存在兼容性缺陷,没有正确处理类路径的自动导入,导致 JVM 无法找到兼容的 Jansi 实现,转而尝试加载预编译的 x86_64 原生库,最终失败。
临时解决方案
- 单次启动指定类路径:
你已验证的方法,直接在启动时指定 jansi jar:groovysh -cp /Users/xxx/.sdkman/candidates/groovy/4.0.8/lib/jansi-2.4.0.jar - 修改启动脚本永久修复:
找到 SDKMAN 中 Groovy 的 bin 目录(通常为~/.sdkman/candidates/groovy/4.0.8/bin),编辑groovysh脚本,在 CLASSPATH 配置段添加 jansi jar 的路径:
保存后直接运行CLASSPATH="$CLASSPATH:$GROOVY_HOME/lib/jansi-2.4.0.jar"groovysh即可正常使用。
是否属于 Bug?
这大概率是 Groovy 启动脚本在 Mac arm64 环境下的兼容性 Bug,或是 SDKMAN 打包 Groovy 时的适配遗漏。同版本 Groovy 在 Linux 环境下能正常工作,说明启动逻辑在非 Mac arm64 环境下是正常的,针对 M1 的架构适配存在缺失。
你可以前往 Groovy 官方代码仓库提交 Issue,说明以下信息:
- 环境:Mac M1(arm64)、Groovy 4.0.8、SDKMAN 安装方式
- 问题现象:启动 groovysh 时的 Jansi 加载警告及架构不兼容提示
- 临时解决方法:手动指定 jansi jar 到类路径即可正常运行
内容的提问来源于stack exchange,提问作者chenzhongpu
相关产品推荐
相关产品推荐

