leiningen - как добавить зависимости для локальных фляг?

Я хочу использовать leiningen для создания и развития моего проекта clojure. Есть ли способ изменить project.clj, чтобы сказать ему, чтобы выбрать несколько jar-файлов из локальных каталогов?

У меня есть некоторые фирменные банки, которые нельзя загрузить в общедоступные репозитории.

Кроме того, можно ли использовать leiningen для поддержки каталога "lib" для проектов clojure? Если в нескольких моих проектах clojure используются одни и те же банки, я не хочу хранить отдельную копию для каждого из них.

Спасибо

11 ответов

Решение

Вы можете положить свои частные банки в lib/ и они будут на пути к классам в целях lein swank и тому подобное; похоже, это лишает смысла использование инструмента управления зависимостями, хотя, если вы на самом деле не хотите управлять этими зависимостями, вы можете рассматривать Leiningen как "инструмент управления зависимостями с открытым исходным кодом" и, возможно, быть осторожным с lein clean,

По мере того как ситуация усложняется - задействовано большее количество частных jar-файлов, они развиваются, и вам необходимо принять во внимание некоторую информацию о версиях - идея Артура о создании частного репозитория Maven может оказаться более подходящей.


(HR обозначает точку отсечения детали, специфичную для Leiningen... Продолжите ниже для получения информации об общей истории инструментария управления сборкой / зависимостями на земле Clojure, включая некоторые ссылки, которые, я думаю, могут оказаться очень полезными в вашей ситуации.)

Кроме того, на данный момент не существует универсального соглашения по вопросу о том, какой инструмент лучше всего подходит для Clojure, и Лайнинген, хотя и приобретает интеллектуальный потенциал, также постоянно приобретает все большее значение в областях возможностей и полировки, что означает, в частности, что это еще не завершено. Вот цитата из Стюарта Хэллоуэя, автора книги "Прагматичная книжная полка" "Clojure для программирования": "Мой 2c: Leiningen - важный шаг, но многое еще предстоит сделать". Для полной публикации и очень интересной дискуссии о: инструментах сборки и тому подобном в пространстве Clojure, см. Leiningen, Clojure и библиотеки: что мне не хватает? нить в группе Google Clojure. Многие участники особо отмечают необходимость наличия локальных зависимостей, не содержащихся ни в каких репозиториях, локальных или иных, и подробно описывают решения, которые они придумали для таких сценариев. Возможно, вы могли бы увидеть, есть ли что-нибудь, что может решить вашу проблему сейчас / может решить ее в будущем, когда наборы функций созреют?

В любом случае, возможно, что у Лейнингена, возможно, еще нет хорошей истории, готовой к некоторым сложным сценариям. Если вы считаете, что это может быть правдой в вашем случае (и я имею в виду, что после того, как вы рассмотрите идею частного репо), вот несколько ссылок на альтернативы на основе maven, взятые из вышеупомянутой темы: polyglot maven, http://github.com/talios/clojure-maven-plugin; Эта публикация в блоге предназначена для людей, пытающихся использовать maven с Clojure. Насколько я помню, Мейкель Брандмейер (также в SO под своим онлайн-дескриптором kotarak) использует Gradle (систему сборки Groovy) с плагином для размещения Clojure под названием Clojuresque; Я никогда не пробовал сам, так как не знаю ничего о Groovy, но он утверждает, что провел с ним очень хороший строительный акт, и я считаю, что он не имеет ничего общего с maven - что является плюсом само по себе для некоторых из нас.:-)

Просто используйте :resource-paths в вашем файле project.clj. Я использую его, например, для подключения к серверам Siebel. Просто создал каталог ресурсов в моей директории проекта и скопировал туда файлы jar. Но, конечно, вы можете использовать более общий каталог:

(defproject test-project "0.1.0-SNAPSHOT"
:description "Blah blah blah"
...
:resource-paths ["resources/Siebel.jar" "resources/SiebelJI_enu.jar"])

Затем из репозитория lein я могу создать экземпляры Siebel Data Bean, например:

(def sbl (com.siebel.data.SiebelDataBean.))
(.login sbl "siebelServer" "user" "password")
...

Если у вас более новая версия Java, вы, конечно, можете использовать подстановочные знаки в спецификации пути, например, для более общего каталога:

:resource-paths ["/tmp/SiebelJars/*"]
  1. Создайте каталог в проекте:

    mkdir maven_repository

  2. Добавьте локальные банки в этот репозиторий:

    Например, эта команда добавляет jaad-0.8.3.jar файл в хранилище maven:

    mvn deploy:deploy-file -Dfile=jaad-0.8.3.jar -DartifactId=jaad -Dversion=0.8.3 -DgroupId=jaad -Dpackaging=jar -Durl=file:maven_repository

  3. Добавьте следующее к project.clj

    :repositories {"local" "file:maven_repository"}

  4. Сейчас очередной lein deps должно сработать:

    $ lein deps Downloading: jaad/jaad/0.8.3/jaad-0.8.3.pom from local Transferring 0K from local [WARNING] *** CHECKSUM FAILED - Error retrieving checksum file for jaad/jaad/0.8.3/jaad-0.8.3.pom - IGNORING

Предупреждение можно игнорировать, так как баночка будет проверена в проекте и не загружена из интернета.

Первоисточник: Использование локальных JAR-файлов с Leiningen (изменено с момента копирования)

Я нахожу lein pom; lein jar; lein install хорошо работает при разработке библиотек.

Сделайте это в разрабатываемой библиотеке, и ваше приложение, которое требует его, будет использовать его без каких-либо :repositories Фу требуется.


С другой стороны, lein do pom, jar, install немного более кратким.


Это позволяет вызывать библиотеку как любой другой :dependencies [[project-name "version"]]

Я считаю, что "правильный" подход - создать частный репозиторий Maven, чтобы вы могли хранить банки в одном месте, и все ваши ветви и т. Д. Примут изменения. Это может быть излишним за то, что вы делаете. Мне любопытно, если это проще.

Вы можете использовать плагин lein-localrepo: https://github.com/kumarshantanu/lein-localrepo

Ни одно из этих решений не помогло мне. Вместо этого я установил локальный репозиторий и использовал maven для установки файла jar в локальный репозиторий, а также добавил локальный репозиторий в мой project.clj

В командной строке:

mvn deploy:deploy-file -DgroupId=local -DartifactId=bar \
    -Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar \
    -Durl=file:repo

И я пишу свой project.clj так:

(defproject foo "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [local/bar "1.0.0"]]
  :repositories {"project" "file:repo"})

Надеюсь, поможет.

[ССЫЛКА: https://gist.github.com/stuartsierra/3062743 ]

Недавняя разработка Фила s3-wagon-private плагин для Leiningen: https://github.com/technomancy/s3-wagon-private

Это должно позволить вам публиковать артефакты в частном удаленном репо.

Может быть, посмотрите на этот предыдущий ответ, я приведу пошаговые инструкции по настройке хранилища локально для проекта (доступ через file://) в котором вы могли бы установить свои банки.

Наилучший вариант - настроить частную артефакт JFrog/Nexus и развернуть там свои снимки / выпуски, а затем добавить эту артефакт в качестве репозиториев в свой проект.

Другие более простые способы

Статический HTTP Самый простой вид частного репозитория - это веб-сервер, указывающий на каталог, полный статических файлов. Вы можете использовать file:/// URL в ваших репозиториях: для развертывания таким образом, если каталог является локальным по отношению к машине, на которой работает Leiningen.

SCP Если у вас уже настроен сервер с открытыми ключами SSH, транспорт scp - это простой способ публикации и использования личных зависимостей. Поместите следующее внутри defproject:

:plugins [[org.apache.maven.wagon/wagon-ssh-external "2.6"]]
:repositories [["releases" "scp://somerepo.com/home/repo/"]]

Затем поместите следующее вне defproject:

(cemerick.pomegranate.aether/register-wagon-factory!
 "scp" #(let [c (resolve 'org.apache.maven.wagon.providers.ssh.external.ScpExternalWagon)]
          (clojure.lang.Reflector/invokeConstructor c (into-array []))))

Также возможно выполнить развертывание в хранилище с использованием транспорта scp и использовать его по http, если вы настроили nginx или что-то подобное для обслуживания каталога хранилища по HTTP.

NB SCP развертывается на Clojars больше не поддерживается

Первоначальный источник здесь https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md

Попробуйте мое решение, как создать файл JAR с зависимостями http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html

Другие вопросы по тегам