Как обновить зависимости Clojure при работе с nrepl.el?
Как я понимаю, когда я делаю nrepl-jack-in
, загружается REPL вместе со всеми зависимостями, определенными в project.clj. Если я затем обновляю project.clj, чтобы добавить новую зависимость, мне нужно убить сервер и повторно запустить nrepl-jack-in
или есть способ обновить зависимости в текущем REPL?
Ответы
Ответ 1
Обновление: возможно, есть надежда,
См. https://github.com/cemerick/pomegranate
Ранее:
Короткий ответ - да, вам нужно перезапустить процесс JVM.
Я не знаю, как неплохо обновлять зависимости в live repl. Leiningen (называемый nrepl-jack-in) будет управлять зависимостями и настраивать путь к классам только при перезапуске. Попытка сделать что-то динамичное и умное ужасно хрупка.
Вычеркнутый текст ниже на самом деле правдивый, но на мгновение размышление казалось таким плохим советом, я отметил его как таковой...
Если у вас есть локальная зависимость (например, файл jar), вы можете использовать долгосрочную устаревшую функцию add-classpath
в repl. Но вы входите в зараженное драконом болото java-загрузчиков классов.
Ответ 2
До того, как существовал гранат, я написал свою собственную библиотеку для динамической загрузки зависимостей.
https://github.com/bmillare/dj
После выпуска lein2 и того, как он под крышкой может использовать pomegrante, я переписал dj, чтобы использовать это под ним. Таким образом, даже если вы не используете 'dj', это может быть полезно как ссылка, чтобы увидеть, что он делает.
Ответ 3
Перезапуск REPL кажется самым простым способом. Это можно сделать
с:
M-x cider-restart
Это также похоже на lein deps
. Таким образом, весь процесс
добавления новой зависимости просто включает добавление require
в
ваш project.clj
, а затем вызывает cider-restart
.
Другим (очень удобным) способом является использование
clj-refactor.
Добавление артефакта (C-c m a p
или cljr-add-project-dependency
)
предложит версию, которую вы хотите, автоматически поместите новую
зависимостей в вашем файле project.clj
и перезагрузить сеанс.