2

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

要使用我自己的类路径,我使用了 Rick Moynihan 在关于设置自定义类路径的 stackoverflow 问题中提出的出色建议,即设置如下脚本:

#!/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 兼容性还没有?

4

3 回答 3

3

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

不久前,我差点开枪试图解决这个问题。希望这能帮您省去麻烦。

于 2010-04-08T07:49:06.970 回答
2

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

于 2010-04-08T02:14:56.783 回答
0

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

我的这篇博客文章描述了我见过的在 Linux 上运行一个时髦的服务器的最简单方法。基本上你制作一个 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 中安装 slime 的最佳方式。

于 2010-08-23T12:38:45.937 回答