Leinigen использует управление зависимостями maven под крышками, поэтому все зависимости устанавливаются в
${HOME}/.m2/repository/${groupId-as-path}/${artifactId}/$[version}/${artifactId}-${version}.jar
, где для [org.clojure/clojure "1.3.0"]
идентификатор группы равен org.clojure
, идентификатор артефакта равен clojure
, а версия 1.3.0
. groupIds преобразуются в пути, поэтому groupId org.clojure
имеет путь org/clojure
.
В зависимости от maven, указанной в pom.xml, это будет выглядеть так:
<project>
...
<dependencies>
<dependency>
<groupId>org.clojure</groupId>
<artifactId>clojure</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
...
</project>
Примечание. Если groupId не указан, leiningen использует одинаковые значения для groupId и artifactId.
Преимущество использования управления зависимостями maven заключается в том, что оно обрабатывает переходные зависимости для вас, т.е. если вы укажете зависимость от чего-либо, вы получите все, от чего это зависит, и все, от чего зависят эти вещи и т. д. и т. д.
Поэтому, чтобы зависеть от локального проекта, правильно установить локальный проект в вашем локальном хранилище.
Чтобы вы могли бесконечно менять свои версии на этапе разработки, maven поддерживает зависимости SNAPSHOT, в результате чего к версии добавляется некоторая дополнительная информация (в основном дата и время), и maven знает, что, скажем, 1.3.1-SNAPSHOT она должна выглядеть для последней версии этого снимка. Это вызвано соглашением об именах {version} -SNAPSHOT.
В maven вы можете указывать системные зависимости жестко закодированным путем, но обычно это плохая практика - обычно она используется для вещей, зависящих от платформы, то есть может иметь собственный компонент библиотеки.
По умолчанию выполняется поиск в центральном репозитории maven, и leinigen добавляет в репозиторий clojars , который служит в качестве центрального репозитория для jar-файлов clojure.
leinigen использует этот материал под прикрытием и создает путь к классам, ссылаясь на файлы jar в вашем локальном хранилище maven.
Обратите внимание, что вы можете сгенерировать pom.xml
из проекта leinigen с помощью lein pom
. Вы могли бы тогда выгнать Maven из этого. Полезная функция
mvn dependency:tree
, который дает ascii art представление всех зависимостей.