Leiningen - как добавить зависимости для локальных банок?
Я хочу использовать leiningen для создания и разработки моего проекта clojure. Есть ли способ изменить project.clj, чтобы сказать ему выбрать некоторые банки из локальных каталогов?
У меня есть некоторые фирменные банки, которые нельзя загрузить в публичные репозитории.
Кроме того, может ли leiningen использоваться для поддержки каталога lib для проектов clojure? Если куча моих проектов clojure использует одни и те же банки, я не хочу поддерживать отдельную копию для каждого из них.
Спасибо
Ответы
Ответ 1
Вы можете поместить свои частные банки в lib/
, и они будут на пути к классам в целях lein swank
и тому подобное; это, кажется, превзойдет смысл использования инструмента управления зависимостями, хотя, если вы фактически не хотите, чтобы эти зависимости управлялись, вы могли бы рассматривать Leiningen как "инструмент управления зависимостями с открытым исходным кодом" и, возможно, быть осторожны с lein clean
.
По мере того, как ситуация становится более сложной - там задействовано большее количество частных банкоматов, они развиваются, и вам нужно учитывать некоторую информацию о версиях на их основе - идея Arthur о создании частного репозитория Maven может быть более подходящей.
(HR означает конечную точку отсечения, относящуюся к Leiningen). Продолжите ниже для получения информации об общей истории инструментов управления сборкой/зависимостью на земле Clojure, включая некоторые ссылки, которые, по моему мнению, могут оказаться очень полезными в вашем ситуация.)
Кроме того, пока нет универсального соглашения по вопросу о том, какой из них является лучшим инструментом построения для Clojure, а Leiningen, в то время как набирает силу, также постоянно набирает в областях особенности и полировку - то есть, в частности, что он еще не завершен. Здесь цитата из Стюарта Хэллоуэй, автора "Прагматической книжной полки" "Программирование Clojure": "Мой 2c: Leiningen - важный шаг, но есть еще много дел". Для полной публикации и очень интересного обсуждения re: инструменты сборки и т.п. В пространстве Clojure см. Leiningen, Clojure и библиотеки: что я отсутствует? в группе Clojure Google. Многие участники конкретно указывают на необходимость наличия локальных зависимостей, не содержащихся в каких-либо репозиториях, локальных или иных, и подробно описывают решения, которые они придумали для таких сценариев. Возможно, вы могли видеть, есть ли там что-нибудь, что может решить вашу проблему сейчас/может решить ее в будущем, когда набор функций созреет?
В любом случае, возможно, что Leiningen, возможно, не имеет хорошей истории, готовой для некоторых сложных сценариев. Если вы считаете, что это может быть справедливо для вашего дела (и я имею в виду, если вы рассмотрите идею частного репо), здесь некоторые ссылки на альтернативы на основе maven, взятые из вышеупомянутого потока: polyglot maven, clojure-maven-plugin; эта публикация в блоге направлена на то, чтобы быть полезной людям, пытающимся использовать maven с Clojure. Насколько я помню, Meikel Brandmeyer (также на SO под его онлайн-ручкой kotarak) использует Gradle (a Groovy система сборки) с плагином для размещения Clojure под названием Clojuresque; Я никогда не пробовал это сам, так как не знаю в первую очередь о Groovy, но он утверждает, что работает с ним очень красиво, и я считаю, что это не имеет ничего общего с maven - что-то, что является плюсом и само по себе для некоторых из нас.: -)
Ответ 2
Просто используйте : пути ресурсов в файле project.clj. Я использую его, например. для подключения к серверам Siebel. Просто создал каталог ресурсов в моем каталоге проектов и скопировал туда файлы jar. Но, конечно, вы могли бы использовать более общий каталог:
(defproject test-project "0.1.0-SNAPSHOT"
:description "Blah blah blah"
...
:resource-paths ["resources/Siebel.jar" "resources/SiebelJI_enu.jar"])
Затем из реплики лейна я могу создавать экземпляры Siebel Data Bean, например.
(def sbl (com.siebel.data.SiebelDataBean.))
(.login sbl "siebelServer" "user" "password")
...
Если у вас есть более новая версия Java, вы можете, конечно, использовать подстановочные знаки в своей спецификации пути, например, для более общего каталога:
:resource-paths ["/tmp/SiebelJars/*"]
Ответ 3
-
Создайте каталог в проекте:
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 (изменено с момента копирования)
Ответ 4
Я нахожу, что lein pom; lein jar; lein install
хорошо работает при разработке библиотек.
Сделайте это в разрабатываемой библиотеке, и ваше приложение, требующее этого, будет использовать его без необходимости :repositories
foo.
В качестве альтернативы lein do pom, jar, install
немного более кратким.
Это позволяет вызывать библиотеку как любой другой :dependencies [[project-name "version"]]
Ответ 5
Я считаю, что "правильный" подход заключается в создать частный репозиторий Maven, чтобы вы могли хранить банки в одном месте, а все ваши ветки и т.д. поднимут изменения. Это может быть излишним для того, что вы делаете. Мне интересно, если это более простой способ.
Ответ 6
Вам может понравиться использовать плагин lein-localrepo
: https://github.com/kumarshantanu/lein-localrepo
Ответ 7
Недавняя разработка - плагин Phil s3-wagon-private
для Leiningen: https://github.com/technomancy/s3-wagon-private
Это должно позволить вам публиковать артефакты для частного удаленного репо.
Ответ 8
Возможно, посмотрите на этот предыдущий ответ, я предоставляю пошаговые инструкции по настройке локального хранилища для проекта (доступ через file://
), в котором вы может установить ваши банки.
Ответ 9
Ни одно из этих решений не помогло мне. Вместо этого я установил локальный репозиторий и использовал 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]
Ответ 10
Попробуйте мое решение, как создать файл jar с зависимостями
http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html