此问题是在尝试在原始于 Windows 上构建的 Clojure 项目上运行 WSL2 时出现的。
原始的 :local/root 路径以 "C:/..." 开头,但在 WSL2(运行 Ubuntu 22)上运行需要转换为 "/mnt/c/..."。
手动更改它们会让它们工作,但很繁琐。甚至不愿提及源代码控制的问题。
想象自动转换规则感觉真的很糟糕,如果能简单地指定特定于 OS 的值那就更好了。也许像这样:
{some.ns/some-lib {:local/root
{:local-path/windows "C:/..."
:local-path/linux "/mnt/c/..."
:local-path/macos "/some/other/dev/path"}}}
在运行时,应根据 JVM 运行的 OS 选择正确的本地路径值。
显然,这也可能在运行 Parallels 的 MacOS 上成为问题,其中文件系统集成也很紧密,但在宿主 OS 上同一路径可能有不同的值。鉴于 Linux 发行版、Windows 版本和 MacOS 版本的 Cambrian 爆炸,事先知道这些可能并不实际。这将由开发者负责根据具体开发环境设置这些值。所以在我看来,如果可以选择提供映射而不是字符串,将某些高级 OS 选项作为替代方案就足够了。
在我看来,这些值始终以开发者的为中心,并且可能受到雇主 devops 政策的影响。
(是的,这是我的实现偏见,但我乐意支持任何处理此问题的通用方法。)