2010-03-07 14 views
9

J'essaie d'ajouter des chemins à mon chemin de classe dans le REPL Clojure que j'ai configuré dans Emacs en utilisant ELPA. Apparemment, ce n'est pas la variable d'environnement $ CLASSPATH, mais plutôt la variable swank-clojure-classpath que Swank met en place. Parce que j'ai utilisé ELPA pour installer Swank, Clojure, etc., il y a une tonne de fichiers .el qui s'occupent de tout au lieu de mon fichier .emacs. Malheureusement, je n'arrive pas à comprendre comment changer le classpath maintenant. J'ai essayé d'utiliser (setq 'swank-clojure-extra-classpaths (liste ...)) avant et après le contenu ELPA dans mes .emacs, et j'ai essayé d'ajouter des chemins directement à swank-clojure -classpath dans .emacs, .emacs.d/init.el et .emacs.d/user/user.el, mais rien ne fonctionne.Comment puis-je configurer le chemin de classe Clojure dans Emacs après l'installation avec ELPA?

Ce que j'essaie finalement de faire est d'ajouter à la fois le répertoire courant "." et le répertoire dans lequel je garde mes programmes Clojure. Je suppose que swank-clojure-classpath est la chose que j'ai besoin de mettre ici. Merci de votre aide.

Répondre

10

Comme dit Mac, vous pouvez utiliser

M-x swank-clojure-project 

pour établir un REPL de boue à un projet clojure; la commande vous demandera le répertoire racine de votre projet, et établira un classpath qui inclut une variété de répertoires, y compris src/lib/et resources/s'ils sont présents.

Sinon, si vous utilisez Leiningen, vous pouvez commencer que dans un terminal avec la commande

$ lein swank 

de l'intérieur de votre répertoire racine du projet. Ceci établira un classpath de projet standard (comme ci-dessus).De là, vous pouvez vous connecter à ce processus en cours d'exécution via Emacs avec la commande

M-x slime-connect 

Enfin une troisième option que je vous recommande est de se connecter via Emacs/boue (avec M-x slime-connect) à un processus lancé par votre propre script shell qui spécifie un ensemble personnalisé d'arguments de ligne de commande JVM, par exemple

#!/bin/bash 

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

Cela vous permet un contrôle explicite sur la façon dont la machine virtuelle démarre, et est probablement similaire à ce que vous aurez probablement à faire dans la production de toute façon.

3

Vous voulez:

M-x swank-clojure-project 

Cela ajoute tous les pots dans votre/lib dir.

Si vous voulez: utiliser un fichier clojure (de bar.clj), par exemple dans/foo vous feriez:

(ns foo 
    (:use foo.bar)) 
2

Désolé je ne peux pas vous aider avec une réponse, mais peut-être votre question est mal :

Je n'ai moi-même pas commencé une session de clojure depuis Emacs depuis des lustres. Je pense que le meilleur moyen est de décrire toutes vos dépendances dans un seul endroit (par exemple, le pom.xml maven ou project.clj de leiningen) et ensuite commencer une session swank avec ces dépendances. C'est à dire. ajoutez le swank-clojure lib à vos (dev-) dépendances, puis utilisez lein swank ou maven swank (je ne suis pas sûr de la dernière - je n'ai pas utilisé autant et pas depuis longtemps) depuis la ligne de commande pour démarrer une session sexy et utiliser M-x slime-connect attacher à cette session. L'avantage est que vous avez tout ce dont vous avez besoin dans votre chemin de classe - et pas plus, donc vous ne pouvez pas utiliser par erreur quelque chose du repl que votre projet final ignore.

This blog post gives a good summary how to do this right.