2010-08-01 4 views
2

Je configure emacs slime/clojure comme écrit here. Lorsque je cours (doseq [p (.getURLs (java.lang.ClassLoader/getSystemClassLoader))] (println (.getPath p))) pour obtenir classpath, je reçois ce qui suit.Comment ajouter classpath avec emacs slime/conjure?

 
/Users/smcho/.swank-clojure/clojure-1.1.0-master-20091202.150145-1.jar 
/Users/smcho/.swank-clojure/clojure-contrib-1.1.0-master-20091212.205045-1.jar 
/Users/smcho/.swank-clojure/swank-clojure-1.1.0.jar 

Comment puis-je ajouter classpath emacs/boue pour Clojure?

Répondre

3

La procédure diffère selon que vous utilisez slime-connect pour démarrer le slime (en vous connectant à un serveur de swank distant, créé avec lein swank, par exemple) ou que vous démarrez en utilisant M-X slime

Si vous utilisez slime-connect, vous devez modifier le chemin de classe du processus Java qui exécute le serveur swank. Si vous démarrez le serveur swank en utilisant lein swank, ajoutez simplement les jars que vous voulez inclure dans votre chemin de classe au répertoire lib du projet. D'autre part, si vous commencez à utiliser Slime en utilisant M-X slime, le code suivant fera la magie pour vous (il suffit de le placer dans votre fichier ~/.emacs).

(eval-after-load "swank-clojure" 
    '(progn 
    (add-to-list 'swank-clojure-classpath 
      "/Users/smcho/.clojure/") 
    (add-to-list 'swank-clojure-classpath 
      "/Users/smcho/.clojure/blah.jar"))) 

Cela ajoutera /Users/smcho/.clojure/ et /Users/smcho/.clojure/blah.jar au classpath. (Veuillez noter que vous devrez soit redémarrer Emacs ou recharger le.emacs file: tapez M-X load-library, puis tapez .emacs à l'invite suivante.)

+0

À quoi bon ajouter le répertoire * .clojure * au chemin? En outre, si vous utilisez 'add-to-list', pensez à utiliser le troisième argument * APPEND * pour ajouter ces entrées à la * end * du chemin de la classe. Enfin, si le fichier * .emacs * n'est pas sur le "load-path", ce qui est généralement le cas, load-library ne le trouvera pas. Vous devrez utiliser 'load-file' à la place. – seh

1

Si vous êtes prêt à coder en dur la liste des fichiers Jar, cette forme Emacs Lisp devrait suffire:

(let ((base-path "/Users/smcho/.swank-clojure")) 
    (setq swank-clojure-classpath 
     (append 
     swank-clojure-classpath 
     (mapcar (lambda (d) 
        (expand-file-name d base-path)) 
       '("clojure-1.1.0-master-20091202.150145-1.jar" 
        "clojure-contrib-1.1.0-master-20091212.205045-1.jar" 
        "swank-clojure/swank-clojure-1.1.0.jar"))))) 

qui prend votre liste des fichiers Jar et les ajoute à la swank-clojure-classpath variable. Notez que ce formulaire doit être évalué par Emacs, et non par Swank de SLIME. Il est utilisé par Emacs pour démarrer le processus Java qui exécutera Clojure et Swank.

Il existe des méthodes plus élaborées pour configurer le chemin d'accès aux classes d'un projet, par exemple en incluant des chemins de style Maven sous un répertoire racine de projet désigné.

2

Je crois que la façon conseillée de déclencher une répétition de clojure de nos jours est d'utiliser lein swank, et d'utiliser \M-x slime-connect. Voir http://github.com/technomancy/leiningen/ pour une description détaillée de cet outil.

En utilisant leiningen, vous pouvez configurer votre projet en utilisant un fichier de configuration, project.clj. Sur ce fichier, vous pouvez avoir besoin de jars publiés à distance (maven-), et en exécutant lein deps vous obtiendrez un répertoire "lib" avec tous les jars. Puisque la commande lein swank utilise ce répertoire comme chemin de classe, tout ce que vous avez à faire est d'ajouter vos fichiers jars à ce répertoire. Cela dit, si vous utilisez toujours \M-x swank-clojure-project, il détectera également vos fichiers JAR sous ce répertoire. Cependant, si vous n'utilisez qu'un simple \M-x slime pour déclencher une repl repliure, alors je pense qu'il n'y a pas de solution "propre" (en plus d'ajouter le chemin d'accès à $ CLASSPATH de votre environnement global ou d'utiliser quelque chose de vaudou comme elisp la réponse de one in seh - pour changer les arguments de la commande java vm, mais je crois que ceci est seulement destiné à faire des expériences assez basiques, et ne devrait pas être utilisé pour un travail basé sur un projet (exactement pour cette raison!)

Questions connexes