2010-04-07 11 views
2

Je suis heureux d'utiliser swank-clojure, installé via elpa. Mais j'aimerais travailler avec deftype, defprotocol, etc., qui ne sont pas disponibles dans clojure 1.1.Puis-je utiliser swank-clojure avec la branche master clojure 1.2?

Pour utiliser mes propres chemins de classe, j'utilise l'excellente suggestion de Rick Moynihan dans le stackoverflow question about setting custom classpaths, qui devait mettre en place un script comme:

#!/bin/bash 

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

Et cela fonctionne à merveille si le fichier jar clojure lib est 1.1, mais avec 1,2, il explose:

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 

Ainsi est-il une incantation magique pour faire ce travail, ou la compatibilité clojure 1.2 pas encore là?

+2

C'est bon. Avez-vous testé cela avec un projet vide? (Un répertoire 'lib /' avec Clojure et swank et au plus un squelette d'un espace de nommage dans le répertoire 'src /'.) Aussi, au cas où quelque chose est en fait le problème avec votre projet et/ou configuration swank, ça pourrait être utile pour voir toute la trace de la pile ... –

+0

@ Michał Marczyk: Merci, ça m'a aidé à me débrouiller. –

Répondre

3

Le problème ici est comme indiqué ci-dessus. Apparemment, vous utilisez un Clojure qui n'est pas synchronisé avec clojure-contrib. Vous devez construire/utiliser une version de Clojure basée sur le fichier clojure-contrib que vous utilisez, sinon vous continuerez à voir cette erreur. Au moins, c'est la seule chose que je sais qui causera cette erreur particulière.

J'ai failli me tirer dessus en essayant de comprendre celui-ci il y a un moment. Espérons que cela vous a sauvé la peine.

2

Oui, c'est possible. Assurez-vous simplement que vous n'avez pas de jar contrib clojure manqué dans le même dossier. J'ai eu clojure contrib de 1.1, et un clojure jar 1.2 instantané.

0

emacs, Swank, Clojure et Maven sont toujours amis:

Ce billet de blog de mes décrit la meilleure façon que je l'ai vu pour obtenir un serveur Swank sur Linux. Fondamentalement, vous faites un fichier pom et exécuter Maven, qui traite de toutes les questions de versioning:

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

Il y avait aussi un poste de suivi montrant comment ajouter compojure.

Et cela décrit en utilisant le plug-in version de Maven pour découvrir et utiliser les dernières versions de tout et ajouter incantateur:

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

Tout fonctionne toujours à merveille. ELPA semble être le meilleur moyen d'installer slime dans Emacs ces jours-ci.