我按照here编写了emacs slime / clojure。
当我运行(doseq [p(.getURLs(java.lang.ClassLoader / getSystemClassLoader))](println(.getPath p)))来获取类路径时,我得到以下内容。
/Users/smcho/.swank-clojure/clojure-1.1.0-master-20091202.150145-1.jar /Users/smcho/.swank-clojure/clojure-contrib-1.1.0-master-20091212.205045-1.jar /Users/smcho/.swank-clojure/swank-clojure-1.1.0.jar
如何为clojure添加emacs / slime的类路径?
答案 0 :(得分:3)
该过程根据您是否使用slime-connect
启动粘贴(例如,通过连接到使用lein swank
创建的远程swank服务器)或使用{{1}开始粘贴而不同}。
如果您正在使用M-X slime
,则需要修改运行swank服务器的java进程的类路径。如果您使用slime-connect
启动swank服务器,只需将您想要成为类路径一部分的jar添加到项目的lein swank
目录中。
另一方面,如果您使用lib
开始粘贴,则以下elisp代码将为您完成魔法(只需将其放在〜/ .emacs文件中)。
M-X slime
这会将(eval-after-load "swank-clojure"
'(progn
(add-to-list 'swank-clojure-classpath
"/Users/smcho/.clojure/")
(add-to-list 'swank-clojure-classpath
"/Users/smcho/.clojure/blah.jar")))
和/Users/smcho/.clojure/
添加到类路径中。 (请注意,您需要重新启动emacs或重新加载.emacs文件:键入/Users/smcho/.clojure/blah.jar
,然后在下一个提示符下键入M-X load-library
。)
答案 1 :(得分:2)
我认为现在启用clojure reple的建议方法是使用lein swank
,然后使用\M-x slime-connect
。有关此工具的详细说明,请参阅http://github.com/technomancy/leiningen/。
使用leiningen,您可以使用配置文件project.clj配置项目。在此文件中,您可能需要远程(maven)发布的jar,并且通过运行lein deps
,您将获得包含所有jar的“lib”目录。由于lein swank
命令将该目录用作类路径,因此您所要做的就是将您的jar添加到该目录。
也就是说,如果您仍在使用\M-x swank-clojure-project
,它还会检测该目录下的jar。
但是,如果你只是使用普通的\M-x slime
来发布一个clojure repl,那么我认为没有“干净”的解决方案(除了添加你的全局环境的路径$ CLASSPATH或使用一些elisp voodoo - 就像seh的答案 - 改变java vm命令参数。但我相信这只是为了做一些非常基本的实验,不应该用于任何基于项目的工作(正是因为这个原因!)
答案 2 :(得分:1)
如果您愿意硬编码Jar文件列表,那么这个Emacs Lisp表单应该足够了:
(let ((base-path "/Users/smcho/.swank-clojure"))
(setq swank-clojure-classpath
(append
swank-clojure-classpath
(mapcar (lambda (d)
(expand-file-name d base-path))
'("clojure-1.1.0-master-20091202.150145-1.jar"
"clojure-contrib-1.1.0-master-20091212.205045-1.jar"
"swank-clojure/swank-clojure-1.1.0.jar")))))
获取Jar文件列表并将其添加到变量swank-clojure-classpath
。请注意,此表单必须由 Emacs 评估,而不是SLIME的Swank。它被Emacs用来启动将在其中运行Clojure和Swank的Java进程。
有更复杂的方法来设置项目的类路径,例如在指定的项目根目录下包含Maven样式的路径。