切换至Emacs后,Leiningen/CIDER启动REPL报create符号解析错误
针对你遇到的问题,核心原因大概率是REPL启动阶段的初始化代码引用了未定义的create符号——lein jar仅执行编译逻辑,不会触发这些初始化步骤,所以能正常完成。以下是具体排查和解决步骤:
检查项目的
project.clj配置
打开项目根目录下的project.clj,重点查看:repl-options区块,确认是否存在:init、:init-ns、:load这类配置项。比如如果有类似:init (create ...)的代码,或者指定了一个未正确定义create符号的命名空间作为初始命名空间,就会触发该错误。跳过初始化启动REPL验证
在终端执行命令:lein repl --no-init如果能正常启动REPL,说明问题确实出在REPL初始化逻辑里。接下来可以逐个排查
project.clj里的初始化配置,或者全局Leiningen配置(~/.lein/profiles.clj)中的相关设置。检查全局REPL配置
查看你的~/.lein/profiles.clj文件,以及Emacs中CIDER的相关配置(比如cider-repl-init-code变量),确认是否有全局层面的REPL初始化代码调用了create符号。因为简单项目未触发该问题,可能是当前项目的配置与全局配置冲突导致。清理Leiningen缓存
执行以下命令清理缓存后重试:lein clean缓存的编译文件或依赖可能引发异常,清理后重新启动REPL看是否解决问题。
排查自动加载的命名空间
检查project.clj中的:dev依赖、:injections配置项,确认是否有自动加载的代码片段或依赖库在启动时引入了create符号但未正确定义。
内容的提问来源于stack exchange,提问作者Freeze Dolphin

