2010-04-07 79 views
2

我很高興使用swank-clojure,通過elpa安裝。但我想用deftype,defprotocol等做一些工作,而這些工作並不是在clojure 1.1中不可用的。我可以在clojure 1.2 master分支中使用swank-clojure嗎?

要使用我自己的類路徑中,我使用的stackoverflow question about setting custom classpaths,這是由裏克·莫伊尼漢的優秀建議,成立一個類似的腳本:

#!/bin/bash 

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

這工作順順當當如果Clojure的jar文件在LIB是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兼容性還沒有實現?

+2

這裏還好。你有沒有測試過這個空項目? (一個Clojure和swank的'lib /'目錄,最多是src /'目錄下的一個命名空間的骨架)。另外,如果事情實際上是你的項目和/或swank設置的問題,它可能是有用的看到整個堆棧跟蹤... – 2010-04-08 01:12:29

+0

@MichałMarczyk:謝謝,這幫助我解決問題。 – 2010-04-08 02:15:52

回答

3

這裏的問題如上所述。顯然,你正在運行一個與clojure-contrib不同步的Clojure。您需要構建/使用針對您使用的clojure-contrib jar構建的Clojure構建版本,否則您將繼續看到此錯誤。至少,這是我知道的唯一會導致這個特定錯誤的事情。

我幾乎一槍就把自己想出來,讓我們希望這爲你節省了麻煩。

2

是的,這是可能的。只要確保你在同一個文件夾中沒有錯誤匹配的clojure contrib jar。我有1.1的clojure contrib和一個clojure jar 1.2的快照。

0

的emacs,自吹,Clojure的和Maven還是朋友:

這個礦的博客文章介紹了我所見過獲得在Linux上運行的服務器斯旺克最簡單的方法。基本上,你犯了一個POM文件並運行Maven,這與所有版本的問題涉及:

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

還有展示如何添加的Compojure後續文章。

這描述了使用Maven的版本插件來發現和使用的一切的最新版本,並添加咒術:

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

一切還是精美的作品。

ELPA似乎是現在在emacs上安裝粘液的最佳方式。

相關問題