java - 尝试在 emacs 上运行 clojure 项目,但 Java 错误 : Cannot run program powershell. exe

标签 java powershell clojure path-variables

我尝试使用 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 路由,如下所示:

enter image description here

Java版本:“20.0.1”

我不确定我缺少什么才能成功运行命令cider-jack-in

最佳答案

Mathias R. Jessen在评论中提供了关键指针:

特殊的 PATH[1] 环境变量(可在 PowerShell 中的进程级别访问,如 $env:PATH - 请参阅概念性 about_Environment_Variables 帮助主题) - 在 WindowsUnix 类平台上 - 包含列表(通常绝对) 当尝试仅通过文件名调用可执行文件时,平台 API 在其中查找可执行文件的目录路径 strong>(而不是明确地通过文件路径)。

  • 因此,不应将给定可执行文件本身的路径添加到该列表中,而只应添加该可执行文件所在的目录

一般信息:

  • 用于分隔 PATH 条目的分隔符特定于平台的:

    • Windows 使用 ;,而类 Unix 平台使用 :
    • 以编程方式确定此字符,请使用[System.IO.Path]::PathSeparator
  • 条目的顺序很重要:使用列出的第一个目录,其中找到给定名称的可执行文件。

    • 此外,仅在 Windows 上,如果名称不包含文件扩展名(例如,仅使用 foo 而不是 foo.exe ),Windows 会尝试特殊 PATHEXT 中列出的扩展名以便找到匹配的可执行文件(在 Unix 上,可执行文件通常没有具有扩展名,如果确实如此,则必须明确指定)。
  • 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/

相关文章:

java - 使用 Tycho 构建片段时出错 : "xyz.fragment cannot be installed in this environment because its filter is not applicable"

java - 未选择时如何更改 MacOS 中 Java JComboBox 的背景颜色

powershell - Office 365 session 室邮箱 CalendarProcessing 通过 Microsoft Graph 访问

clojure - 如何从 Reitit 后端路由中提取路径参数

Clojure/Incanter 数据转换功能

java - 更改容器 tomcat 服务器上已部署 (Spring Boot) war 的上下文路径。所以它不是 demo-0.01-SNAPSHOT

java - 虽然有数据行,但结果集为空

com - 使用 Powershell 将 Excel 工作表从一个工作簿复制到另一个工作簿

powershell - Powershell:无法读取/设置ExecutionPolicy

recursion - Clojure 递归函数