我很高兴使用通过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兼容性呢?
答案 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中安装粘液的最佳方式。