如何在repl中加载新的Clojure库

12

我有一个工作流问题:

我正在愉快地在我的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)

提前感谢


2
请参见https://dev59.com/4mXWa4cB1Zd3GeqPPrha。 - georgek
3个回答

8
石榴对你有用:
它支持在运行时下载和添加新的依赖项,例如: 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

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

~/.lein/profiles.clj:

{:user {:plugins [[lein-try "0.4.3"]]}}

命令行:

$ 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=>

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接