开发者

Can I use swank-clojure with the clojure 1.2 master branch?

I'm happily using swank-clojure, installed via elpa. But I'd like to do some work with deftype, defprotocol, etc., which aren't aren't available in clojure 1.1.

To use my own class paths, I'm using the excellent suggestion by Rick Moynihan in the stackoverflow question about setting custom classpaths, which was to set up a script like:

#!/bin/bash 

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

And that works swimmingly if the clojure jar file in lib is 1.1, but with 1.2, it blows up:

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

So is there some magical incantation 开发者_如何学编程to make this work, or is clojure 1.2 compatibility not there yet?


The problem here is as stated above. Apparently, you're running a Clojure that is out of sync with clojure-contrib. You need to build/use a build of Clojure that is built against the clojure-contrib jar you're using, otherwise you'll continue to see this error. At least, that's the only thing I know that will cause this particular error.

I nearly shot myself trying to figure this one out a while back. Let's hope this saved you the trouble.


Yes, it is possible. Just make sure that you don't have a miss-matched clojure contrib jar in the same folder. I had clojure contrib from 1.1, and a clojure jar 1.2 snapshot.


emacs, swank, clojure and maven are still friends:

This blog post of mine describes the easiest way I've seen to get a swank server running on Linux. Basically you make a pom file and run maven, which deals with all versioning issues:

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

There was also a follow-up post showing how to add compojure.

And this describes using maven's version plugin to find out and use the latest versions of everything and add incanter:

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

Everything still works beautifully.

ELPA seems to be the best way to install slime in emacs these days.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜