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, чтобы вы могли хранить банки в одном месте, а все ваши ветки и т.д. поднимут изменения. Это может быть излишним для того, что вы делаете. Мне интересно, если это более простой способ.

Ответ 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]