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

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

+7
tools.deps

Leiningen有一个名为Managed Dependencies的功能。这个功能允许您为传递依赖项设置一个公共版本,而不是依赖您的依赖项提供的版本。当您想指定一个库的版本而不实际添加其依赖项时,这很有用。它具有与直接将依赖项添加到您的Leiningen :dependencies中非常相似的作用(我认为),但传达的意图更好。

deps.edn中是否有类似的东西?一种指定依赖项版本解决方法的途径,而不直接将其添加到:deps中?

2 个答案

+4
by

在日常工作学习中,我们大量使用项目级别的deps.edn文件中的:override-deps功能(我们使用CLJ_CONFIG来选中它而不是用户级别的deps.edn文件)。我们有一个名为:defaults的别名,它具有一个条目,用于我们想要“管理”的所有依赖项的:override-deps

我们的(单)存储库有一个名为versions的文件夹,包含该项目级别的文件,然后存储库中的每个子项目都有自己的deps.edn文件,我们在这里指定依赖项,如下所示

selmer {} ; omit :mvn/version "x.y.z"

然后versions/deps.edn

:aliases
{:defaults
 {:override-deps
  {selmer {:mvn/version "1.12.13"}
   ...}}}

然后在子项目中执行以下操作

CLJ_CONFIG=../versions clojure -A:defaults <whatever else we need>
+1

在deps中类似的用例是 :default-deps,它允许您设置当版本未定义时使用的默认依赖项。然而,我们从未实际指定如何包括没有版本的依赖项,以便默认值会被选中。

此外,我们可能需要在指定基础deps.edn方面有更多的灵活性,这可能是一个声明默认依赖项的地方。

因此,这仍然是一个正在进行中的工作。

嗨 @alexmiller,
我喜欢 :default-deps!
将其引入的最佳方式是什么?

我想要的是包含blessed-versions.edn或类似的根目录,
然后是子目录,其中带有将版本指定为“nil”的deps.edn,并引入“祝福的版本”... 不使用CLJ_CONFIG(它与用户配置冲突)可达此目的吗?
目前,我认为不能。
我们是否已经指定了“如何包含没有版本的可选依赖项,以便默认值会被选中”? @alexmiller
暂无更新,但我想这个链接可能是大家投票/关注这个更新信息的正确地方。
...