我可以在clojure 1.2 master分支中使用swank-clojure吗?

时间:2010-04-07 21:34:26

标签: emacs clojure swank

我很高兴使用通过elpa安装的swank-clojure。但是我想做一些与deftype,defprotocol等有关的工作,这些工作在clojure 1.1中是不可用的。

要使用我自己的类路径,我正在使用Rick Moynihan在stackoverflow question about setting custom classpaths中提出的优秀建议,即设置如下脚本:

#!/bin/bash 

java -server -cp "./lib/*":./src clojure.main -e "(do (require 'swank.swank) (swank.swank/start-repl))"

如果lib中的clojure jar文件是1.1,那么它会游泳,但是1.2,它会爆炸:

Exception in thread "main" java.lang.NoSuchMethodError: clojure.lang.RestFn.<init>(I)V (macroexpand.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:5274)
    at clojure.lang.Compiler.load(Compiler.java:5663)
    at clojure.lang.RT.loadResourceScript(RT.java:330)
    at clojure.lang.RT.loadResourceScript(RT.java:321)
    at clojure.lang.RT.load(RT.java:399)
    at clojure.lang.RT.load(RT.java:371)
    at clojure.core$load__5663$fn__5671.invoke(core.clj:4255)
    at clojure.core$load__5663.doInvoke(core.clj:4254)
    at clojure.lang.RestFn.invoke(RestFn.java:409)
...and many, many more

是否有一些神奇的咒语使这项工作,或者还没有clojure 1.2兼容性呢?

3 个答案:

答案 0 :(得分:3)

这里的问题如上所述。显然,你正在运行一个与clojure-contrib不同步的Clojure。你需要构建/使用针对你正在使用的clojure-contrib jar构建的Clojure构建,否则你将继续看到这个错误。至少,这是我所知道的唯一会导致这个特殊错误的事情。

我差点开枪试图让自己想出这个。让我们希望这能为你省去麻烦。

答案 1 :(得分:2)

是的,有可能。只需确保您在同一文件夹中没有错配的clojure contrib jar。我有1.1的clojure contrib和一个clojure jar 1.2快照。

答案 2 :(得分:0)

emacs,swank,clojure和maven仍然是朋友:

我的这篇博客文章描述了我看到在Linux上运行swank服务器的最简单方法。基本上你制作一个pom文件并运行maven,它处理所有版本问题:

http://learnclojure.blogspot.com/2010/03/clojure-maven-emacs-eternal-golden.html

还有一个后续帖子显示了如何添加组合。

这描述了使用maven的版本插件来查找和使用所有内容的最新版本并添加incanter:

http://learnclojure.blogspot.com/2010/08/returning-after-long-absence.html

一切仍然很好。

ELPA似乎是目前在emacs中安装粘液的最佳方式。