Как настроить leiningen для работы с несколькими проектами?

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

Пример:

~/projects/mywebapp  (my own project)
~/projects/noir      (a clone of the github repo)
~/projects/clojureql (a clone of the github repo)

Я хочу, чтобы все они были скомпилированы в одну и ту же JVM одновременно. Я хотел бы запустить передовой край репозиториев git (вытягивая новые коммиты/создавая свои собственные коммиты), и мне не нужно запускать lein jar или lein deps и, конечно же, не нужно перезапускать виртуальную машину, если я изменю какой-либо из проектов.

Вот вариант использования:

После запуска lein swank из emacs я подключаюсь к repl и компилирую файл из mywebapp (с помощью C-c-k), для чего требуется файл из noir. Он находит версию файла в каталоге моих проектов. Позже я открываю этот файл, редактирую его и компилирую (с C-c-k).

Обратите внимание, что я не прошу автокомпиляцию, когда делаю git pull. Я просто не хочу перезапускать JVM или выполнять длительные процессы компиляции jar.

Возможно ли это в Лейнингене? Как я могу настроить это?


person Eric Normand    schedule 01.12.2011    source источник


Ответы (2)


Помогает ли этот вопрос из Часто задаваемых вопросов Lein?

В: Я хочу хакнуть два проекта параллельно, но переключаться между ними неудобно.

A. Используйте функцию, называемую зависимостями при оформлении заказа. Если вы создадите каталог с именем checkouts в корне вашего проекта и создадите в нем символическую ссылку на некоторые другие корни проекта, Leiningen позволит вам взломать их параллельно. Это означает, что изменения в зависимости будут видны в основном проекте без необходимости прохождения всего цикла install/switch-projects/deps/restart-repl. Обратите внимание, что это не замена перечислению проекта в :dependencies; он просто дополняет его для более плотных циклов замены.

person georgek    schedule 01.12.2011
comment
Спасибо! Я, должно быть, пропустил это в FAQ. - person Eric Normand; 01.12.2011
comment
Очень полезно. Эта информация действительно должна быть в основной документации. - person Glen; 02.12.2011

Если вы уже используете swank, вам не нужны зависимости lein checkout. Вы можете просто C-c C-k вашего проекта (который будет загружать jar-версии noir/что угодно), а затем перейти к вашей локальной версии noir и также C-c C-k. Swank с радостью отправляет весь код на ваш repl, и jvm никогда не узнает, что он пришел из другого места!

Я могу рекомендовать это только для небольших изменений, потому что я думаю, что если вы скомпилируете noir.core, который зависит, скажем, от noir.internal, clojure загрузит jarred-версию noir.internal, даже когда вы компилируете локальную версию noir. основной. Тем не менее, это удобный трюк в целом.

person amalloy    schedule 01.12.2011