我尝试使用 cider 在 emacs 上运行 clojure jar 文件,但出现以下错误:
ERROR:ERROR: Unhandled REPL handler exception processing messageUnhandled REPL handler exception processing message {{:op:op init-debuggereval, , :code cljs.core/demunge, :session 9f9a0db9-8cc7-4cf0-b0ba-f426b163fb52, :id :nrepl.middleware.print/stream?7 }1
, :nrepl.middleware.print/print cider.nrepl.pprint/pprint, :nrepl.middleware.print/quota 1048576, :nrepl.middleware.print/buffer-size 4096, :nrepl.middleware.print/options {:right-margin 70}, :session 2f97cb2f-b111-4c37-8658-b63045c9ab2a, :id 6}
Syntax error macroexpanding at (clojuredocs.clj:19:32).
Caused by: java.io.IOException: Cannot run program "powershell.exe": CreateProcess error=2, The system cannot find the file specified
我在系统环境和用户环境的环境路径上设置了 powershell 路由,如下所示:
Java版本:“20.0.1”
我不确定我缺少什么才能成功运行命令cider-jack-in
最佳答案
Mathias R. Jessen在评论中提供了关键指针:
特殊的 PATH
[1] 环境变量(可在 PowerShell 中的进程级别访问,如 $env:PATH
- 请参阅概念性 about_Environment_Variables 帮助主题) - 在 Windows 和 Unix 类平台上 - 包含列表(通常绝对) 当尝试仅通过文件名调用可执行文件时,平台 API 在其中查找可执行文件的目录路径 strong>(而不是明确地通过文件路径)。
- 因此,不应将给定可执行文件本身的路径添加到该列表中,而只应添加该可执行文件所在的目录。
一般信息:
用于分隔
PATH
条目的分隔符是特定于平台的:- Windows 使用
;
,而类 Unix 平台使用:
- 要以编程方式确定此字符,请使用
[System.IO.Path]::PathSeparator
- Windows 使用
条目的顺序很重要:使用列出的第一个目录,其中找到给定名称的可执行文件。
- 此外,仅在 Windows 上,如果名称不包含文件扩展名(例如,仅使用
foo
而不是foo.exe
),Windows 会尝试特殊PATHEXT
中列出的扩展名以便找到匹配的可执行文件(在 Unix 上,可执行文件通常没有具有扩展名,如果确实如此,则必须明确指定)。
- 此外,仅在 Windows 上,如果名称不包含文件扩展名(例如,仅使用
PowerShell 本身不支持以编程方式修改
PATH
的持久定义,因此需要直接使用[System.Environment]::SetEnvironmentVariable()
.NET API:- 但是:
- (a) 此 API 仅适用于 Windows(不存在可在所有类 Unix 平台上运行的统一机制)
- (b) 此 API 不可靠,因为它总是将
REG_EXPAND_SZ
PATH
定义转换为REG_SZ
- 参见this answer了解背景信息和基于注册表的解决方法。
- 但是:
[1] Windows 上的确切情况是 Path
,而在类 Unix 平台上它是 PATH
。由于 Windows 中的环境变量访问不区分大小写,而 Unix 上的环境变量访问区分大小写,因此 PATH
形式适用于这两个平台。
关于java - 尝试在 emacs 上运行 clojure 项目,但 Java 错误 : Cannot run program powershell. exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76597505/