You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下lein在exec-path但Clojure可执行文件不在,cider-jack-in异常求助

解决macOS下Cider提示"clojure executable isn’t on your ‘exec-path’"但lein已存在的问题

我碰到过好几个类似的案例,大概率是下面几个原因之一,咱们一个个排查解决:

1. Cider默认启动方式优先用clojure而非lein

虽然你已经设置了(setq cider-lein-command "lein"),但部分较新的Cider版本会优先使用clojure命令启动项目——尤其是检测到项目里有deps.edn文件时。你可以强制指定Cider用lein启动,把这段配置加到你的Emacs配置文件(比如~/.emacs.d/init.el或~/.config/emacs/init.el)里:

(setq cider-preferred-build-tool 'lein)

重启Emacs后再尝试cider-jack-in。

2. macOS GUI启动的Emacs没继承系统PATH

这是macOS上Emacs的经典坑:如果你是通过Launchpad、Spotlight这类GUI方式启动Emacs,它不会读取终端里~/.zshrc、~/.bash_profile或~/.profile的环境变量,导致Emacs的exec-path看似包含lein路径,但实际运行时找不到。

解决方法选其一即可:

  • 从终端启动Emacs:打开Terminal/iTerm,输入emacs启动,这样会完全继承终端的环境变量,包括lein的路径。
  • 用exec-path-from-shell同步终端PATH:安装这个Emacs包后,它会自动把终端的PATH同步到Emacs里,配置如下:
    (use-package exec-path-from-shell
      :ensure t
      :config
      (exec-path-from-shell-initialize))
    
  • 把PATH配置移到~/.zshenv:如果用zsh,把lein所在路径加到这个文件的PATH里,GUI程序会读取这个文件的环境变量。

3. 确认lein的实际可访问性

哪怕你说lein在exec-path里,还是要做两个小验证:

  • 在终端运行which lein,拿到它的绝对路径(比如/usr/local/bin/lein)。
  • 在Emacs里按M-!输入which lein,看输出和终端是否一致。如果Emacs里找不到,那就是PATH传递的问题,回到第2点解决。
  • 检查lein的可执行权限:终端运行ls -l $(which lein),看权限列是否有x(比如-rwxr-xr-x),如果没有,执行chmod +x $(which lein)添加权限。

4. 查看cider-jack-in的实际执行命令

运行cider-jack-in时,Emacs会在minibuffer显示要执行的命令,你可以仔细看看它是在调用lein repl,还是clojure相关命令。如果是后者,那就是启动方式的问题,回到第1点设置cider-preferred-build-tool即可。

内容的提问来源于stack exchange,提问作者The Unfun Cat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:20:38