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

欢迎!请参阅关于页面了解有关此功能的更多信息。

+7 投票
tools.deps

Leiningen有一个名为管理依赖项的功能。这允许您为传递依赖项设置一个通用的版本,而不是依赖于您的依赖项提供的版本。当您想要指定一个库的版本而无需真正添加对该库的依赖时,这很有用。这与将依赖项直接添加到Leiningen的:dependencies中具有非常相似的效果(我想),但是传达的意图更好。

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

2 答案

+4 投票

我们在工作中在一个项目级别的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 投票
by

在deps中类似的用法是:default-deps,允许您在版本未定义时设置默认依赖。然而,我们从未真正指定如何包含一个不带版本的依赖项,以便会选取默认值。

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

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

by
嗨 @alexmiller,
我喜欢 :default-deps!
最好的导入方法是什么?

我希望的是包含blessed-versions.edn或类似文件的根目录,
然后是包含“nil”版本和导入“blessed-version”的子目录,这能在不使用CLJ_CONFIG(与用户配置冲突)的情况下实现吗?
by
目前,我认为不可以。
by
我们是否已经指定了“如何在没有版本的情况下包含依赖项,以便选取默认值”?@alexmiller
by
暂无更新,但我认为您可以在这里投票/关注关于此问题的最新更新:https://ask.clojure.org/index.php/9849/teams-common-dependencies-tooling-across-multiple-projects
...