如何使用emacs slime / conjure添加classpath?

时间:2010-08-01 20:55:50

标签: clojure

我按照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的类路径?

3 个答案:

答案 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样式的路径。