Можно ли добавить новый материал в путь к классам (например, отредактировать project.clj и запустить lein deps
), а затем импортировать его в существующий сеанс Clojure?
Это без необходимости отключаться, а затем снова подключаться.
Можно ли добавить новый материал в путь к классам (например, отредактировать project.clj и запустить lein deps
), а затем импортировать его в существующий сеанс Clojure?
Это без необходимости отключаться, а затем снова подключаться.
Вы можете использовать pomegranate для загрузки новых библиотек и добавления их в путь к классам во время выполнения. Он не будет читать напрямую из вашего проекта.clj, но использует совместимый синтаксис (используя библиотеку Aether, которую Leiningen 2 использует для собственного разрешения зависимостей).
Использование выглядит так (цитируя пример README):
=> (add-dependencies
:coordinates '[[incanter "1.2.3"]]
:repositories (merge cemerick.pomegranate.aether/maven-central
{"clojars" "http://clojars.org/repo"}))
Тем не менее, вы действительно должны иметь сам гранат в исходном пути к классам, прежде чем его можно будет использовать.
Я предполагаю, что под сессией clojure вы подразумеваете REPL, запущенный lein repl
.
Короткий ответ на ваш вопрос: нет, вы не можете этого сделать.
JVM поддерживает загрузчики классов для обеспечения этого динамического функции загрузки, и clojure использует их для поддержки динамических определений классов с помощью deftype
gen-class
и т. д.
Добавление новых сторонних классов (предположительно новой библиотеки jar) в путь к классам было бы пугающе сложным, если учесть, что вам придется раскручивать и перестраивать уже используемые загрузчики классов.
Подробнее о загрузке классов в clojure см. этот вопрос.