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.
精彩评论