请在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

在deps中类似的使用案例是:default-deps,这允许你在版本未知时设置默认依赖。然而,我们从未真正指定如何包含没有版本的依赖,以便被提取默认依赖。

另外,我们也许需要更多灵活性来指定一个基本的deps.edn,这可能是一个声明这些默认依赖的地方。

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

嗨 @alexmiller,
我喜欢 :default-deps!
最好的拉取方式是什么?

我希望的是包含blessed-versions.edn或者相似的根目录,
然后有deps.edn的子目录,版本设置为"nil",并拉入"被祝福的版本"……在不使用CLJ_CONFIG(与用户配置冲突)的情况下可以实现吗?
目前来看,不能如此的实现。
我们是否已经指定了“如何包含没有版本的依赖,以使默认值被选取”的方法?@alexmiller
暂无更新,但我认为您可以在https://ask.clojure.org/index.php/9849/teams-common-dependencies-tooling-across-multiple-projects上进行投票/关注以获取此问题的更新。
...