Clojure deps.edn:deps键是什么意思?

时间:2018-11-19 15:23:20

标签: clojure dependencies

尝试使用Clojure Deps和CLI时,我惊讶地发现以下所有内容都适用于使用clojure.data.json。

Maven依赖项:

{:deps {org.clojure/data.json {:mvn/version "0.2.6"}}}

具有相同键的Git依赖项:

{:deps {org.clojure/data.json {:git/url "https://github.com/clojure/data.json.git"
                               :sha "13e9d244678be7b235bb24a10310f9d147ea088d"}}}

具有随机密钥的Git依赖项:

{:deps {lol/this-works {:git/url "https://github.com/clojure/data.json.git"
                        :sha "13e9d244678be7b235bb24a10310f9d147ea088d"}}}

对于Maven和Clojars依赖项,:deps键标识工件。改用git sha时,名称似乎无关紧要。

  • Clojure deps.edn:deps键是什么意思?
  • 我应该如何选择:deps键?

我读过的资源,但可能包含我所追求的:

1 个答案:

答案 0 :(得分:2)

与其他“扩展”(例如maven)相比,这似乎是工具中git“扩展”如何处理的结果。与此相关的所有相关代码都可以在here中找到。我还将明确指出,我没有深入阅读此代码,因此,我对此代码的了解也不深。

例如,如果您看一下在maven扩展中对待lib的方式,则似乎实际上是在检查maven以查看提供的名称是否存在工件,您可以在不止于一个地方,但也包括in the multimethod definition of ext/canonicalize :mvn

在git扩展代码中,对lib进行了不同的处理,您可以看到in the multimethod definition of ext/canonicalize :git

我不想在这里深入猜想,但是我想如果这是一个故意的设计决定,则可能与git repo的地址这一概念有关。 SoT用于此类依赖关系(即使回购的地址/名称可能会更改……危险!),而在Maven中,名称是注册的一等公民。

并尝试更直接地回答您的两个问题... :deps键是什么意思?简单的答案是,这取决于它的种类!当使用git时,它可以是任何东西,例如,当使用Maven时,它必须引用一个已知的软件包。我应该如何选择我的Dep键?这有主观的危险,但是,我建议您倾向于使用任何在其后方具有可靠的不可变软件包存储库的dep,并且仅在需要时才使用github之类的dep。这是因为github依赖项可以更改其地址/名称,或干脆消失(删除存储库)。