命名项目依赖关系和:require之间的差异

时间:2014-06-23 01:55:24

标签: clojure dependencies packages

当我查看类似 clojure.data.json 的源代码时,我可以看到一个名称空间,例如,像这样:

(ns clojure.data.json...)

所以,当我想在我的 .clj Clojure文件中:require 时,我只是这样做:

(ns so.example
    (:require [clojure.data.json :as json])
    ...

但是在 .clj 的依赖项中,我有:

:dependencies [[org.clojure/data.json "0.2.4"]

所以 clojure.data.json "成了" org.clojure / data.json

现在,比如, server.socket 我在我的依赖项中:

[server-socket "1.0.0"]

所以这次没有" .org"添加,没有斜线,但点变成破折号。

Clojure源文件中的require和 project.clj 中的依赖项之间的关系是什么?有没有"逻辑"?

如何找到要在依赖项中输入的正确行?

2 个答案:

答案 0 :(得分:5)

project.clj中的依赖关系向量是maven工件坐标,通过查找适当的jar来解析依赖关系。 Leiningen将尝试找到适当的jar并将它们添加到类路径中,以便可以在运行时从其归档内容中加载名称空间定义和其他资源。代码中的require语句指定要在类路径中查找的资源。例如,如果您需要clojure.data.json,Clojure将在您的类路径中的某处查找路径为clojure/data/json.clj的资源,并尝试从该资源加载名称空间clojure.data.json的定义。

答案 1 :(得分:2)

没有关系。命名空间是源代码文件中定义的内容。依赖项基于项目名称,由作者在发布时决定。您几乎总能在项目github站点或Clojars上找到正确的依赖信息,或者在某些情况下,在maven上找到。