为何cider-jack-in-cljs报错,而shadow-cljs cljs-repl app可正常运行?
解决Emacs中
cider-jack-in-cljs报UnsupportedClassVersionError的问题 核心原因是Emacs的运行环境和终端环境变量不共享:你切换Java版本的配置(比如修改PATH、JAVA_HOME)只在当前终端会话生效,而Emacs如果不是从终端启动,就不会加载这些配置,导致使用了错误的Java版本,和项目要求的版本不匹配,抛出版本错误。
具体排查与解决步骤:
确认Emacs中的Java版本
在Emacs里执行M-x shell打开内置shell,运行java -version和echo $JAVA_HOME,对比终端里的输出。如果不一致,就坐实了环境变量不同的问题。解决办法
- 从终端启动Emacs
直接在已经切换好Java版本的终端里输入emacs启动,Emacs会继承终端的环境变量,自然就能用到正确的Java版本。 - 同步终端环境变量到Emacs
安装exec-path-from-shell包(通过MELPA即可安装),然后在init.el里添加以下配置,让Emacs加载你的shell配置文件(比如.bashrc、.zshrc)并同步关键环境变量:(setq exec-path-from-shell-arguments '("-l")) (exec-path-from-shell-copy-envs '("JAVA_HOME" "PATH")) - 手动指定Java路径给CIDER
如果不想调整Emacs启动方式,也可以直接在CIDER配置里指定项目需要的Java路径:
这个方式会强制CIDER使用指定的Java版本,适合多项目多Java版本的场景。(setq cider-clojure-cli-global-options (concat "-J-Djava.home=" (expand-file-name "/path/to/your/java11")))
- 从终端启动Emacs
内容的提问来源于stack exchange,提问作者Pedro Delfino
相关产品推荐
相关产品推荐

