在哪里可以找到Leiningen中依赖项的有效版本号

时间:2011-05-06 21:47:11

标签: clojure leiningen clojure-contrib

我是Clojure和Leiningen的新手,我已经确定我想要使用的一些内容位于clojure.contrib.generic.math-functions中。我在http://richhickey.github.com/clojure-contrib/branch-1.1.x/math-api.html找到了API信息,但我找不到任何可以帮助我弄清楚我应该把这个依赖项放在我的project.clj文件中的内容。

我尝试过[clojure.contrib.generic.math-functions "1.1"][clojure.contrib.generic.math-functions "1.1.x"][clojure.contrib.generic.math-functions "1.1.0"]。对于每一个,我得到像......

...
Caused by: org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException: Missing:
----------
1) clojure.contrib.generic.math-functions:clojure.contrib.generic.math-functions:jar:1.1

4 个答案:

答案 0 :(得分:11)

所有clojure-contrib名称空间都在一个jar文件中提供,其依赖关系必须列为:

[org.clojure/clojure-contrib "1.2.0"]

请注意,该工件有不同的版本。 1.2.0是目前的稳定版本。

为了在clojure代码中使用来自math-functions命名空间的函数,您需要requireuse这样的命名空间,通常在ns表单中完成源文件的开头:

(ns my.namespace
    (:use [clojure.contrib.generic.math-functions]))

查看here,了解userequire之间的差异。

答案 1 :(得分:9)

Leiningen的下一个版本将完成此目的的搜索任务。它将搜索Clojars,Maven Central以及您的项目列出的任何其他存储库,前提是它们提供可下载的索引。它已经实现了,所以如果你从git运行Leiningen你可以使用它。

此外,Leiningen教程涵盖了这一点。输入“lein help tutorial”。

答案 2 :(得分:5)

您通常可以在clojars.org找到所需内容 - 它是leiningen的默认存储库。目前Clojure的稳定版本是1.2.0,所以你在leiningen project.clj中有这个版本:

[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]

要在您的clojure中使用通用数学函数,requireuse在源文件顶部的名称空间声明中:

(ns your-namespace
    (:use [clojure.contrib.generic.math-functions :as mathf]))

这允许您像这样引用该命名空间中的函数:

(mathf/abs -10) ;; => 10

:use - 使用:as的命名空间是在代码中使用其他命名空间中的函数的首选方法。 require没问题,但您必须在函数前添加整个命名空间(例如clojure.contrib.generic.math-functions/abs),这样才不实用。使用没有:as的命名空间允许您使用这些函数而不使用任何前缀(例如abs),但是您更有可能获得命名空间冲突,并且可能很难看到函数来自何处,特别是如果你:use多个图书馆。

您可以通过查看http://clojars.org/repo/来浏览默认leiningen存储库中提供的所有库。当1.3.0结束时,clojure-contrib的结构将发生变化,因此如果您使用的是1.3.0-alpha-xx版本,则必须包含特定的contrib库:

[org.clojure.contrib/generic "1.3.0-alpha4"]

答案 3 :(得分:2)

现在clojure.contrib已被拆分,数学函数就在math.numeric-tower中。 lein依赖关系指定如下:

[org.clojure/math.numeric-tower "0.0.1"]

您可以使用或要求合适,例如

(use '[clojure.math.numeric-tower])