所以我有这个工作流程问题:
我很高兴在我的 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)
提前致谢
石榴适合你:
https://github.com/cemerick/pomegranate
它支持在运行时下载和添加新的依赖项,例如:
(add-dependencies :coordinates '[[incanter "1.2.3"]]
:repositories (merge cemerick.pomegranate.aether/maven-central
{"clojars" "http://clojars.org/repo"}))
这样的东西对你有用吗?
https://groups.google.com/d/msg/clojure/AJXqbpGMQw4/0-7-3pXRwGkJ
还有 clojure.core/add-classpath,但已弃用。
http://clojuredocs.org/clojure_core/clojure.core/add-classpath
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=>
从 v1.12.0 开始,Clojure 提供了开箱即用的
add-lib
、add-libs
和 sync-deps
(在命名空间 clojure.repl.deps
下)。