Путаница вокруг lein: зависимости и: плагины
В project.clj
, когда вы видите такие вещи, как:
:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/clojurescript "1.7.228"]
[com.cemerick/piggieback "0.2.1"]
[org.clojure/tools.nrepl "0.2.10"]
[org.clojure/core.async "0.2.374"]]
а также:
:plugins [[org.bodil/lein-noderepl "0.1.11"]
[lein-cljsbuild "1.1.2"]
[lein-npm "0.6.1"]
[lein-repls "1.9.5"]
[lein-doo "0.1.6"]]
- Откуда эти пакеты? Это исключительно Clojars и Maven? Можно ли настроить Lein для получения их от GitHub?
- Когда эти пакеты добавляются в ваш проект, можно ли просто загрузить их и добавить в путь к классу Java? Или что-то еще происходит?
1 ответ
- Откуда эти пакеты?
на что хорошо отвечают Что такое стандартные хранилища leiningen?
Вы можете использовать что-то вроде lein-git-deps для загрузки зависимостей из GitHub, но я бы порекомендовал использовать репозитории Maven, поскольку именно на этом основана экосистема Leiningen.
- Lein просто загружает их и добавляет их в ваш путь к классу Java? Или что-то еще происходит?
Это заслуживает дальнейшего обсуждения. Когда вы запускаете leiningen REPL (например), Leiningen сначала смотрит в свой локальный ~/.m2
хранилище для всех зависимостей в :dependencies
, Если он не может найти ни одного из них, он отправит запрос в каждый из репозиториев этого проекта, чтобы узнать, есть ли у них копия этой зависимости. Если они это сделают, Leiningen загрузит его, затем рекурсивно загрузит эти зависимости и так далее. Как только все зависимости будут загружены, Leiningen добавит их все в путь к классам вашего приложения и запустит приложение.
С Leiningen нужно помнить, что есть две JVM и две пути к классам, одна для вашего приложения и одна для Leiningen. Когда вы добавляете зависимости к :dependencies
они попадают в путь к классу вашего приложения, когда они добавляются в :plugins
они идут к классной дорожке Лейнингена.