Могу ли я использовать swank-clojure с основной веткой clojure 1.2?

Я с удовольствием использую swank-clojure, установленный через elpa. Но я хотел бы поработать с deftype, defprotocol и т. д., которых нет в clojure 1.1.

Чтобы использовать свои собственные пути к классам, я использую отличное предложение Рика Мойнихана в вопрос stackoverflow о настройке пользовательских путей к классам, который должен был настроить такой скрипт, как:

#!/bin/bash 

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

И это работает плавно, если файл jar clojure в 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 еще не существует?


person Rob Lachlan    schedule 07.04.2010    source источник
comment
Это там хорошо. Вы тестировали это с пустым проектом? (Каталог lib/ с Clojure и swank и, самое большее, скелет пространства имен в каталоге src/.) Кроме того, если что-то действительно не так с вашим проектом и/или настройкой swank, может быть полезно увидеть всю трассировку стека. ...   -  person Michał Marczyk    schedule 08.04.2010
comment
@Michał Marczyk: Спасибо, это помогло мне разобраться.   -  person Rob Lachlan    schedule 08.04.2010


Ответы (3)


Проблема здесь как указано выше. Судя по всему, вы используете Clojure, который не синхронизирован с clojure-contrib. Вам нужно собрать/использовать сборку Clojure, созданную для используемого вами jar-файла clojure-contrib, в противном случае вы будете продолжать видеть эту ошибку. По крайней мере, это единственное, что я знаю, что вызовет эту конкретную ошибку.

Я чуть не застрелился, пытаясь понять это некоторое время назад. Будем надеяться, что это избавило вас от проблем.

person Rayne    schedule 08.04.2010

Да, это возможно. Просто убедитесь, что в той же папке нет несоответствующей фляги clojure contrib. У меня был clojure contrib из 1.1 и снимок clojure jar 1.2.

person Rob Lachlan    schedule 08.04.2010

emacs, swank, 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 в наши дни.

person John Lawrence Aspden    schedule 23.08.2010