Как можно загружать новые библиотеки 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"}))

Ответ 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=>