Clojure 如何使用emacs slime/concure添加类路径?
我按照书面说明设置了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 /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.jarClojure 如何使用emacs slime/concure添加类路径?,clojure,Clojure,我按照书面说明设置了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-
如何为emacs/slime为clojure添加类路径?如果您愿意硬编码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使用它来启动Java进程,该进程将在其中运行Clojure和Swank
为项目设置类路径有更详细的方法,例如在指定的项目根目录下包含Maven样式的路径。我认为现在启动clojure reple的建议方法是使用
lein swank
,并使用\M-x slime connect
。有关此工具的详细说明,请参阅
使用leiningen,您可以使用配置文件project.clj配置项目。在这个文件中,您可能需要远程(maven-)发布的jar,通过运行lein deps
您将获得一个包含所有jar的“lib”目录。由于lein-swank
命令将该目录用作类路径,因此您只需将JAR添加到该目录中即可
也就是说,如果您仍在使用\M-x swank clojure项目
,它还将检测该目录下的JAR
但是,如果您只是使用普通的
\M-x slime
来启动clojure repl,那么我认为没有“干净”的解决方案(除了向全局环境的$CLASSPATH添加路径或使用一些elisp voodoo(如seh的答案中的一个)来更改java vm命令参数之外。但我相信这只是为了做一些非常基本的实验,不应该用于任何基于项目的工作(正是出于这个原因!)根据您是使用slime connect
启动slime(例如,通过连接到使用lein swank
创建的远程swank服务器)还是使用M-X slime
启动slime,程序会有所不同
如果您使用的是slime connect
,则需要修改运行swank服务器的java进程的类路径。如果您使用lein swank
启动swank服务器,只需将希望成为类路径一部分的JAR添加到项目的lib
目录中即可
另一方面,如果您正在使用M-X slime
启动slime,下面的elisp代码将为您带来神奇的效果(只需将其放在~/.emacs文件中即可)
这将向类路径添加
/Users/smcho/.clojure/
和/Users/smcho/.clojure/blah.jar
(请注意,您需要重新启动emacs或重新加载.emacs文件:键入M-X加载库
,然后在下一个提示中键入.emacs
)在使用.<代码>添加到列表< /代码>时,考虑使用第三个附加参数将这些条目添加到类路径的末尾。最后,如果.Emacs文件不在<代码>加载路径,通常情况下,<代码>加载库< /代码>找不到。您需要use加载文件
。
(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")))