Comment utiliser l'espace de noms de projet dans SLIME REPL
Question
J'ai installé lein avec le plugin swank, Emacs, SLIME et clojure-mode, et créé un nouveau projet en utilisant lein new. J'ai appelé le projet clojure-test. J'ouvre ensuite clojure_test / src / clojure_test / core.clj dans Emacs, et pendant que dans ce fichier, j'appelle M-x clojure-jack-in
. Cela ouvre une fenêtre SLIME, qui fonctionne très bien; Je peux charger du code en utilisant C-c C-l
, basculer dans l'espace de noms de mon projet en utilisant C-c M-p
et utiliser les dépendances que j'ai ajoutées au projet.
Le problème survient lorsque, à partir de l'espace de noms "utilisateur", j'essaye d'utiliser l'espace de noms pour le projet lui-même. L'appel de (use 'clojure-test)
à l'intérieur de SLIME à partir de l'espace de noms "utilisateur" entraîne l'erreur suivante:
Could not locate clojure_test__init.class or clojure_test.clj on classpath:
[Thrown class java.io.FileNotFoundException]
-
Pourquoi Clojure recherche-t-il ces fichiers? L'espace de noms est apparemment déjà chargé, car je peux y basculer via
C-c M-p
, mais pour une raison quelconque, Clojure pense que ces fichiers particuliers sont importants pour l'utilisation de l'espace de noms. -
Comment configurer mon projet pour pouvoir utiliser l'espace de noms de base de SLIME? Puisque lein est censé s'en occuper, quelles informations ne lui donne-je pas dont il a besoin?
La solution
L'espace de noms "clojure-test" doit être dans ./src/clojure_test.clj (./src est dans le chemin de classe par défaut sauf si vous l'avez modifié dans votre fichier project.clj)
L'avez-vous mis dans src/clojure_test/core.clj
(qui devrait avoir ns clojure-test.core à la place)?
Consultez la documentation des bibliothèques sur http://clojure.org/libs