如何在repl中加载新的clojure库

时间:2012-07-25 01:08:26

标签: clojure

所以我遇到了这个工作流程问题:

我很高兴在我的clojure项目repl上打字并意识到我需要另一个不在我的project.clj中的库,比如在这种情况下,我需要tools.cli库。

我在编辑器中打开project.clj并在:dependencies

中添加一个条目
     [org.clojure/tools.cli "0.2.1"]

然后,在项目目录中,我在shell中键入lein deps以提取必要的库

在拉动项目依赖项之后,从技术上讲,所有类文件已经准备好加载了,但是如果我回到我的repl并输入:

> (use 'tools.cli)

我明白了:

=>> FileNotFoundException Could not locate tools/cli__init.class
  or tools/cli.clj on classpath:   clojure.lang.RT.load (RT.java:432)

所以我必须重新启动我的repl,浪费了一大堆时间将repl的状态重新配置到我需要库之前的位置。

有没有办法动态加载库?例如,在我运行lein deps之后,我只需返回到repl并输入:

> (load-library "tools.cli") 
> (use 'tools.cli)

提前致谢

3 个答案:

答案 0 :(得分:7)

石榴适合你:

https://github.com/cemerick/pomegranate

它支持在运行时下载和添加新的依赖项,例如:

(add-dependencies :coordinates '[[incanter "1.2.3"]]
                  :repositories (merge cemerick.pomegranate.aether/maven-central
                                       {"clojars" "http://clojars.org/repo"}))

答案 1 :(得分:1)

这样的事情对你有用吗?

https://groups.google.com/d/msg/clojure/AJXqbpGMQw4/0-7-3pXRwGkJ

还有clojure.core / add-classpath,但它已被弃用。

http://clojuredocs.org/clojure_core/clojure.core/add-classpath

答案 2 :(得分:0)

您可以使用lein-try在repl中试用一个库。

~/.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=>