clojure и leiningen — использование репозитория git в качестве зависимости

Возможно ли, чтобы leiningen вытащил проект непосредственно из репозитория git (на github) в качестве зависимости?

Используя Bundler с Ruby, можно сопоставить гем с репозиторием git, что позволяет быстро разрабатывать и интегрировать зависимые проекты.

Обновить

Основываясь на принятом ответе, теперь есть плагин leiningen для управления git-deps: https://github.com/tobyhede/lein-git-deps


person Toby Hede    schedule 29.01.2012    source источник


Ответы (4)


Ответ на 2017 год: используйте lein-voom.

Вы можете использовать lein-voom для извлечения и сборки зависимостей проекта из GitHub или других репозиториев Git. Он работает, позволяя вам аннотировать записи пары векторов зависимостей метаданными, специфичными для voom. Вот пример из README:

^{:voom {:repo "https://github.com/ring-clojure/ring" :branch "1.3"}}
[ring/ring-core "1.3.0-RC1-20140519_142204-gaf0379b"]

Основной пример использования voom — это предоставление командам, поддерживающим несколько проектов Clojure в отдельных репозиториях Git, легко зависеть от текущей версии одного или нескольких проектов от другого без необходимости постоянно развертывать выпуски моментальных снимков разработки. .

Я предпочитаю lein-voom вместо lein-git-deps (плагин, рекомендованный в ранее принятом ответе от 2012 года) по нескольким причинам:

  1. Тот факт, что спецификация задается через метаданные, делает этот плагин более гибким и легко расширяемым. В нем уже есть возможность указать конкретную ветку/тег репозитория. Вы можете добавить на карту другие пары ключ/значение для дополнительного точного контроля без особых усилий.

  2. Вы можете просто удалить метаданные из своей записи зависимости для стабильных выпусков; т. е. нет необходимости перемещать записи/рефакторинг вашего project.clj после того, как ваша зависимость переместится из GitHub в Clojars.

  3. На момент написания (ноябрь 2017 г.) lein-voom обновлялся в течение последних нескольких месяцев, тогда как lein-git-deps оставался в застое в течение 4 лет.

person DaoWen    schedule 25.11.2017

Я только что нашел это в проекте clojurescriptone.clj

Я думаю, что это может быть полезно для вас:

:git-dependencies [["https://github.com/clojure/clojurescript.git"
                       "886d8dc81812962d30a741d6d05ce9d90975160f"]
                   ["https://github.com/levand/domina.git"
                       "8933b2d12c44832c9bfaecf457a1bc5db251a774"]]

Файл находится здесь.

person Ning Sun    schedule 29.01.2012
comment
Круто, +1! Обратите внимание, что это не встроено в Leiningen — оно обрабатывается подключаемым модулем Leiningen, распространяемым как часть исходного дерева ClojureScript One. Это не значит, что с этим решением что-то не так, просто нужно извлечь этот плагин из cljs, чтобы использовать его. Возможно, когда-нибудь она будет опубликована отдельно. (Или, может быть, это уже было? Я никогда не замечал этого раньше, поэтому я действительно не уверен...) - person Michał Marczyk; 29.01.2012
comment
Хорошо, спасибо. В процессе извлечения этого в плагин lein, но есть пара проблем (моя первая попытка плагина): github.com/tobyhede/lein-git-deps. Будет держать вас в курсе и сообщит, если это сработает. - person Toby Hede; 29.01.2012
comment
Обратите внимание, что вам все еще нужно отслеживать :extra-classpath-dirs, чтобы использовать это. В идеале у вас должен быть плагин, который мог бы проверять все pom всех ваших зависимостей и находить элемент ‹scm›, который мог бы автоматизировать добавление зависимостей проверки для тех вещей, которые уже перечислены как :dependencies в project.clj. Такой плагин будет очень легко написать, если вы используете много зависимостей от git. - person ; 31.01.2012

Leiningen не будет делать это за вас (отредактируйте: в любом случае не из коробки; следуя примеру ответа Sunng, можно обнаружить, что для этого был написан плагин - см. Также мой комментарий к этому ответу ; checkout deps остается хорошим встроенным решением), но вы можете включить checkout других проектов в путь к классам. Эта функциональность описана в разделе часто задаваемых вопросов README; вот соответствующие вопросы и ответы:

В: Я хочу взломать два проекта параллельно, но переключаться между ними неудобно.
О: Если вы создадите каталог с именем checkouts в корне вашего проекта и символическая ссылка на какой-то другой проект, связанный с ним, Leiningen позволит вам взломать их параллельно. Это означает, что изменения в зависимости будут видны в основном проекте без необходимости прохождения всего цикла install/switch-projects/deps/restart-repl, а копия в checkouts будет иметь приоритет над зависимостью, объявленной в project.clj. Обратите внимание, что это не замена перечислению проекта в :dependencies; он просто дополняет это для удобства.

person Michał Marczyk    schedule 29.01.2012

Я только что переместил свои отсылки из Лейнингена в файл deps.edn, используя lein-tools-deps. Вы по-прежнему можете использовать Leiningen в качестве инструмента сборки и использовать плагины. Но вы можете вытащить зависимости git (и все другие ваши зависимости), используя deps.edn.

Ваш project.clj выглядит примерно так:

(defproject example-project "0.1.0-SNAPSHOT"
  :source-paths           [] ;; provided by lein-tools-deps
  :resource-paths         [] ;; provided by lein-tools-deps
  :min-lein-version       "2.0.0"
  :main                   example.core
  :aot                    [example]
  :jar-name               "example.jar"
  :plugins                [[lein-tools-deps "0.4.5"]]
  :middleware             [lein-tools-deps.plugin/resolve-dependencies-with-deps-edn]
  :lein-tools-deps/config {:config-files [:install :project]})

и тогда ваш deps.edn тоже находится в корне проекта и выглядит примерно так:

{:paths ["src" "resources"]
 :deps {org.clojure/clojure    {:mvn/version "1.10.1"}
        org.clojure/data.json  {:mvn/version "1.1.0"}
        github/repo            {:git/url "https://github.com/github/repo.git"
                                :sha "e5f5c9e6839191f1e37ddfa51cf442b2d5403ff3"}}}
person Schmudde    schedule 16.03.2021