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

欢迎!请参阅关于页面,了解有关此网站如何工作的更多信息。

0
Clojure CLI

此问题是在尝试使用最初在Windows操作系统上构建的项目运行Clojure项目在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运行的操作系统选择适当的本地路径。

当然,这个问题也可能出现在运行Parallels的MacOS上,在那里文件系统集成也很紧密,但客户端操作系统在宿主操作系统上的同一路径可能有不同的值。鉴于Linux发行版、Windows版本和MacOS版本的Cambrian爆炸,事先知道这些值可能并不实际。因此,这可能是由开发人员根据具体开发环境来设置这些值的责任。所以,在我看来,如果可以提供一种方式来提供包含某些高级操作系统选项的映射,用以替代字符串选项,那就足够了。

对我来说,这些值似乎始终都是以开发人员为中心的,并可能受到雇主DevOps政策的约束。

(是的,这是我的实现偏差,但我会很高兴地支持任何处理此问题的一般方法。)

1 答案

0

FWIW 我会建议仅仅使用相对路径 for :local/root。绝对路径并不必要,只会让事情变得更复杂。

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

我也有一些设置,所有内容都位于相同的 ~/code/project~/code/project/packages/some-lib 中,我再次只使用 :local/root "packages/some-lib" 而不是绝对路径。

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

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

对于本地项目引用,这是我所做的(所有内容都从相同的顶级工作目录出发),当然。但是,当处理第三方供应商的 jar 文件时,这并不总是实用的。这些文件通常基于标准安装默认值位于长时间路径中,特别是在 Windows 系统上。
如果它们是常规的 JAR 文件,你可能可以将它们复制到项目中?就像一个 `vendor` 目录?我曾经这样做过,对于一些 Maven 中不可用的事物。

你还可以将一些东西移动到一个特定主机别名中,并让用户相应地激活它。所以就是::aliases {:win {:extra-deps ...} :linux {:extra-deps ...}}。
大多数情况下,它们除了 jar 文件之外还涉及二进制文件。

然而,你刚才提到的那一点非常有帮助。然后只需使用正确的别名运行即可。可以调用多个别名吗?我不认为我试过。例如,当我知道可能需要更多RAM运行它时,我在自定义别名中设置了一些与内存相关的JVM设置。无论如何,感谢你的建议!
by
是的,多个别名没有问题。只需执行clj -A:foo:bar:etc。
...