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/*"]
Создайте каталог в проекте:
mkdir maven_repository
Добавьте локальные банки в этот репозиторий:
Например, эта команда добавляет
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
Добавьте следующее к
project.clj
:repositories {"local" "file:maven_repository"}
Сейчас очередной
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