Я хочу использовать leiningen для создания и развития моего проекта clojure. Есть ли способ изменить project.clj, чтобы он выбирал несколько банок из локальных каталогов?
У меня есть проприетарные банки, которые нельзя загрузить в публичные репозитории.
Кроме того, можно ли использовать leiningen для поддержки каталога "lib" для проектов clojure? Если несколько моих проектов clojure используют одни и те же банки, я не хочу поддерживать отдельную копию для каждого из них.
Спасибо
Ответы:
Вы можете поместить свои частные jar-файлы,
lib/
и они будут в пути к классам для целейlein swank
и т.п. похоже, что это лишает смысла использование инструмента управления зависимостями, хотя, если вы на самом деле не хотите, чтобы эти зависимости управлялись, вы можете рассматривать Leiningen как «инструмент управления зависимостями с открытым исходным кодом» и, возможно, будьте осторожны сlein clean
.По мере усложнения ситуации - задействовано все больше частных jar-файлов, они развиваются, и вам нужно принимать во внимание некоторую информацию о версиях - идея Артура о создании частного репозитория Maven может быть более подходящей.
(HR обозначает точку отсечения для деталей, специфичную для Leiningen ... Продолжите ниже, чтобы получить информацию об общей истории инструментов управления сборкой / зависимостями в стране Clojure, включая некоторые ссылки, которые, как я думаю, могут оказаться очень полезными в вашей ситуации.)
Кроме того, на данный момент нет единого мнения по вопросу о том, какой инструмент для сборки лучше всего подходит для Clojure, и Leiningen, набирая популярность, также постоянно совершенствует свои функции и полировки - в частности, это означает, что это еще не завершено. Вот цитата Стюарта Хэллоуэя, автора книги Pragmatic Bookshelf «Программирование Clojure»: «Мой 2c: Leiningen - важный шаг, но еще многое предстоит сделать». Для полной публикации и очень интересного обсуждения инструментов re: build и т.п. в пространстве Clojure см. Leiningen, Clojure и библиотеки: что мне не хватает?ветка в группе Clojure Google. Многие участники особо отмечают необходимость наличия локальных зависимостей, не содержащихся в каких-либо репозиториях, локальных или иных, и подробно рассказывают о решениях, которые они придумали для таких сценариев. Возможно, вы могли бы увидеть, есть ли что-нибудь, что может решить вашу проблему сейчас / может решить ее в будущем, когда наборы функций созреют?
В любом случае, вполне возможно, что у Лейнингена еще нет хорошей истории для некоторых сложных сценариев. Если вы считаете, что это может быть правдой в вашем случае (и я имею в виду после того, как вы рассмотрите идею частного репо), вот несколько ссылок на альтернативы на основе maven, взятые из вышеупомянутого потока: polyglot maven , clojure-maven-plugin ; это сообщение в блогенацелен на то, чтобы быть полезным для людей, пытающихся использовать maven с Clojure. Насколько я помню, Мейкель Брандмейер (также на SO под своим онлайн-дескриптором kotarak) использует Gradle (систему сборки Groovy) с подключаемым модулем Clojuresque для размещения Clojure; Я сам никогда не пробовал, так как ничего не знаю о Groovy, но он утверждает, что провел с ним очень хорошую сборку, и я считаю, что это не имеет ничего общего с maven - что само по себе является плюсом для некоторых из нас. :-)
источник
Просто используйте : resource-paths в вашем файле project.clj. Я использую его, например, для подключения к серверам Siebel. Просто создал каталог ресурсов в каталоге моего проекта и скопировал туда файлы jar. Но, конечно, вы можете использовать более общий каталог:
Затем из lein repl я могу создать экземпляры Siebel Data Bean, например
Если у вас более новая версия Java, вы, конечно, можете использовать подстановочные знаки в спецификации пути, например, для более общего каталога:
источник
Создайте в проекте каталог:
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 будет зарегистрирован в проекте, а не загружен из Интернета.
Первоисточник: Использование локальных JAR с Leiningen (изменено после копирования)
источник
Я считаю, что
lein pom; lein jar; lein install
хорошо работает при разработке библиотек.Сделайте это в разрабатываемой библиотеке, и ваше приложение, требующее ее, будет использовать ее без необходимости в
:repositories
foo.Как вариант,
lein do pom, jar, install
это немного более кратко.Это позволяет вызывать библиотеку как любую другую
:dependencies [[project-name "version"]]
источник
:dependencies [[project-name "version"]]
lein install
. Он построит для вас банку и помпон.Я считаю, что «правильный» подход - создать частный репозиторий Maven, чтобы вы могли хранить банки в одном месте, и все ваши ветки и т. Д. Принимали изменения. Это может быть излишним для того, что вы делаете. Мне любопытно, проще ли это.
источник
Вы можете использовать плагин
lein-localrepo
: https://github.com/kumarshantanu/lein-localrepoисточник
Недавняя разработка -
s3-wagon-private
плагин Фила для Leiningen: https://github.com/technomancy/s3-wagon-privateЭто должно позволить вам публиковать артефакты в частном удаленном репо.
источник
Ни одно из этих решений у меня не помогло. Вместо этого я установил локальный репозиторий и использовал maven для установки файла jar в локальном репо и добавил локальное репо в свой проект. Clj
В командной строке:
И я пишу свой project.clj так:
Надеюсь, поможет.
[ССЫЛКА: https://gist.github.com/stuartsierra/3062743 ]
источник
Возможно, взгляните на этот предыдущий ответ , я предоставляю пошаговые инструкции по настройке репозитория, локального для проекта (доступного через
file://
), в который вы могли бы установить свои jar-файлы.источник
Попробуйте мое решение, как создать файл jar с зависимостями http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html
источник
Лучший вариант - настроить частный артефактор JFrog / Nexus и развернуть там свои снимки / выпуски, а затем добавить этот артефактор в качестве репозиториев в свой project.clj
Другие более простые способы:
Статический HTTP Простейший вид частного репозитория - это веб-сервер, указывающий на каталог, полный статических файлов. Вы можете использовать URL-адрес file: /// в ваших репозиториях: для развертывания таким образом, если каталог является локальным для компьютера, на котором работает Leiningen.
SCP Если у вас уже есть сервер, настроенный с вашими открытыми ключами SSH, транспорт scp - это простой способ публикации и использования частных зависимостей. Поместите в defproject следующее:
Затем поместите следующее за пределами defproject:
Также возможно развернуть в репозиторий с помощью транспорта scp и использовать его через http, если вы настроили nginx или что-то подобное для обслуживания каталога репозитория через HTTP.
NB. SCP, развертываемые в Clojars, больше не поддерживаются.
Первоисточник находится здесь https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md
источник