Где найти действительные номера версий для зависимостей в Лайнингене - PullRequest
14 голосов
/ 07 мая 2011

Я новичок в Clojure и Leiningen, и я определил, что часть того, что я хочу использовать, находится в clojure.contrib.generic.math-functions Я нашел информацию об API для этого в http://richhickey.github.com/clojure-contrib/branch-1.1.x/math-api.html,, но не могу найти ничего, что помогло бы мне выяснить, что я должен поместить в свой файл 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 ]

11 голосов
/ 07 мая 2011

Все пространства имен clojure-contrib поставляются в одном файле jar, для которого должна быть указана зависимость, например:

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

Обратите внимание, что существуют разные версии этого артефакта.1.2.0 является текущей стабильной версией.

Чтобы использовать функции из пространства имен math-functions в вашем коде clojure, вам необходимо либо require, либо use такое пространство имен, обычно выполняется в форме ns в начале вашего исходного файла:

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

Просмотрите здесь , чтобы увидеть различия между use и require.

9 голосов
/ 07 мая 2011

Следующая версия Leiningen будет иметь задачу поиска именно для этой цели.Он будет искать Clojars, Maven Central и любые другие репозитории, перечисленные вашим проектом, при условии, что они предлагают загружаемые индексы.Он уже реализован, поэтому, если вы запускаете Leiningen из git, вы можете использовать его.

Кроме того, руководство Leiningen охватывает это.Введите "учебник по lein help".

5 голосов
/ 07 мая 2011

Обычно вы можете найти то, что вам нужно на clojars.org - это хранилище по умолчанию для leiningen. Текущий стабильный выпуск Clojure - 1.2.0, так что вы должны иметь это в своем leiningen project.clj:

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

Чтобы использовать общие математические функции в вашем clojure, require или use в объявлении пространства имен в верхней части исходного файла:

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

Это позволяет вам обращаться к функциям в этом пространстве имен следующим образом:

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

:use -ing-пространства имен с :as является предпочтительным способом использования функций из других пространств имен в вашем коде. require все в порядке, но вам придется ставить перед вашими функциями все пространство имен (например, clojure.contrib.generic.math-functions/abs), так что это не практично. Использование пространства имен без :as позволяет вам использовать эти функции вообще без какого-либо префикса (например, abs), но вы с большей вероятностью столкнетесь с пространством имен, и вам может быть трудно увидеть, откуда поступают функции, особенно если вы :use много библиотек.

Вы можете просмотреть все библиотеки, доступные в репозитории leiningen по умолчанию, отметив http://clojars.org/repo/. Структура clojure-contrib изменится, когда выйдет 1.3.0, поэтому вам придется включить определенную библиотеку contrib, если вы используете версию 1.3.0-alpha-xx:

[org.clojure.contrib/generic "1.3.0-alpha4"]
2 голосов
/ 27 февраля 2012

Теперь, когда clojure.contrib разбит, математические функции находятся в чем-то, что называется math.numeric-tower.Зависимость lein определяется следующим образом:

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

Вы можете использовать или требовать, если это кажется подходящим, например,

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

...