2024 Clojure调查!中分享您的想法。

欢迎!请查看关于我们页面了解更多关于这个平台的信息。

0
Clojure CLI

这个问题是在尝试运行一个基于Windoze构建的项目时在WSL2上出现的。

原始的: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运行的操作系统选择正确的本地路径值。

当然,这也可能是MacOS上运行Parallels时的问题,其中文件系统集成也很紧密,但来宾操作系统在宿主机上对同一路径可能有不同的值。鉴于Linux发行版、Windows版本和MacOS版本的Cambrian爆炸,预先知道这些值可能不切实际。根据具体的开发设置,开发者负责设置这些值。因此,我认为,如果要提供一个包含某些高级操作系统选项的映射而不是字符串,将是有益的。

对我来说,这些值显然将始终以开发人员为中心,并且可能受雇主devops策略的影响。

(是的,这是我的实现偏差,但我将乐意支持任何处理此问题的通用方式。)

1 个答案

0

仅供参考,我建议只使用相对路径来设置 :local/root。绝对路径不是必需的,反而会使事情变得复杂。

在我的个人设置中,所有的项目都在 ~/code 中。因此,在 deps.edn 中,我从项目只使用 :local/root "../some-lib",一切工作正常。无论是执行在 WSL/Windows 或其他任何地方。

我还设置了所有内容都在同一个 ~/code/project~/code/project/packages/some-lib 中,我再次只使用 :local/root "packages/some-lib" 而不是绝对路径。

(实际上,大多数项目仍然使用 project.clj,但适用相同的方法)

如果你避免使用绝对路径,你的所有问题都会消失。 ;)

by
对于本地项目引用,我这样操作(所有内容都是从同一顶级工作目录开始的),当然。但处理第三方供应商的jar文件时并不总是实用。这些文件通常根据标准安装默认值隐藏在很长的路径中,尤其是在Windows上。
by
如果它们是常规的JAR文件,您可以将它们复制到项目中?例如一个`vendor`目录?我过去曾这样做过,对于一些无法通过maven获得的资源。

您还可以将内容移动到特定于主机的别名中,并让用户相应地激活它。所以只::aliases {:win {:extra-deps ...} :linux {:extra-deps ...}}`。
by
大多数情况下它们涉及除了jar文件之外的二进制文件。

然而,你最后一点非常有帮助。然后只需使用正确的别名运行它。可以调用多个别名吗?我不认为我试过。例如,我有一些关于内存的自定义别名,当我知道可能需要更多的RAM来运行它时,我会使用这些别名。无论如何,感谢这个建议!
是的,多个别名没有问题。只需使用 clj -A:foo:bar:etc.
...