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

欢迎!请参阅关于页面了解此网站的一些详细信息。

+7
tools.deps

Leiningen有一个名为管理依赖项的功能。这允许您为依赖项设置一个通用的版本,而不是依赖于您依赖项提供的版本。当您想指定一个库的版本,但实际上不添加对该库的依赖项时,这非常有用。它与直接添加到Leiningen :dependencies中的依赖项具有非常相似的效果(我觉得是这样),但能更好地表达意图。

在deps.edn中是否有类似的功能?一种在未直接添加到:deps的情况下指定依赖项版本解析的方法?

2 个答案

+4

在我们的工作中,我们严重依赖于:override-deps在一个全局的deps.edn文件中(我们使用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
没有更新,但我想https://ask.clojure.org/index.php/9849/teams-common-dependencies-tooling-across-multiple-projects 可能是投票/观察此更新的地方。
...