这个问题是在尝试在WSL2(运行Ubuntu 22)上运行一个在Windoze上构建的Clojure项目时出现的。
原始的:local/root路径以"C:/..."开头,但在WSL2上(运行Ubuntu 22)需要将其转换为"/mnt/c/..."才能运行。
手动更改它们可以让它们工作,但这很麻烦。更不用提源代码控制的问题了。
想象自动转换规则感觉很糟糕,如果能简单地指定针对特定操作系统的值会更好。也许像这样:
{some.ns/some-lib {:local/root
{:local-path/windows "C:/..."
:local-path/linux "/mnt/c/..."
:local-path/macos "/some/other/dev/path"}}}
在运行时,应该根据JVM运行的操作系统选择正确的local-path值。
当然,这也可能是在macOS运行Parallels上出现的问题,其中文件系统集成也很紧密,但虚拟机可以有不同的值来表示主机上的相同路径。鉴于Linux发行版、Windows版本和macOS版本的 Cambrian 爆炸,预先知道这些值可能并不实际。这应该是开发者的责任,根据具体开发环境设置这些值。因此,我认为,提供一种选择,即提供一个包含某些高级OS选项的映射而不是字符串就足够了。
在我看来,这些值总是以开发者为中心,并且可能受雇主的DevOps政策约束。
(是的,这是我的实现偏颇,但我愿意支持任何处理此问题的通用方法。)