Как можно загружать новые библиотеки clojure в repl
Итак, у меня есть эта проблема с рабочим процессом:
Я с удовольствием печатаю на моем проекте clojure repl и понимаю, что мне нужна другая библиотека, которая не находится в моем project.clj
, скажем, в этом случае мне нужна библиотека tools.cli
.
Я открываю project.clj
в своем редакторе и добавляю запись в :dependencies
[org.clojure/tools.cli "0.2.1"]
Затем, в каталоге проекта, я набираю lein deps
в оболочке, чтобы вытащить необходимые библиотеки
После вытягивания зависимостей проекта технически все файлы классов уже готовы к загрузке, но если я вернусь к своему реплику и напечатаю:
> (use 'tools.cli)
Я получаю это:
=>> FileNotFoundException Could not locate tools/cli__init.class
or tools/cli.clj on classpath: clojure.lang.RT.load (RT.java:432)
Поэтому мне пришлось бы перезапустить мой реплик, потратив целую кучу времени на переконфигурирование состояния реплики до того места, где я был до того, как мне понадобилась библиотека.
Есть ли способ динамически загружать библиотеку? например, после того, как я запустил lein deps
, я просто вернусь к реплике и напечатаю:
> (load-library "tools.cli")
> (use 'tools.cli)
Заранее спасибо
Ответы
Ответ 1
Гранат для вас:
https://github.com/cemerick/pomegranate
Он поддерживает загрузку и добавление новых зависимостей во время выполнения, например:
(add-dependencies :coordinates '[[incanter "1.2.3"]]
:repositories (merge cemerick.pomegranate.aether/maven-central
{"clojars" "http://clojars.org/repo"}))
Ответ 2
Будет ли что-то подобное вам работать?
https://groups.google.com/d/msg/clojure/AJXqbpGMQw4/0-7-3pXRwGkJ
Существует также clojure.core/add-classpath, но он устарел.
http://clojuredocs.org/clojure_core/clojure.core/add-classpath
Ответ 3
Вы можете попробовать одну библиотеку в repl, используя lein-try
.
~/.lein/profiles.clj
:
{:user {:plugins [[lein-try "0.4.3"]]}}
command line
:
$ lein try clj-time "0.5.1"
Fetching dependencies... (takes a while the first time)
lein-try loaded [clj-time "0.5.1"]
nREPL server started on port 57036
REPL-y 0.2.0
Clojure 1.5.1
Docs: (doc function-name-here)
(find-doc "part-of-name-here")
Source: (source function-name-here)
Javadoc: (javadoc java-object-or-class-here)
Exit: Control+D or (exit) or (quit)
user=>