Frage

Ich bin derzeit in den Prozess-Funktionalität zu einem bestehenden J2EE-Webapp des Hinzufügens, in einem Tomcat-Container, und ich schreibe meine Ergänzungen Clojure verwenden. Mein Setup ist einfach: ich nur hinzufügen, Anrufe zu statischen Methoden von clojure erzeugt und Code all die harte Arbeit von der clojure Seite. Der Erstellungsprozess besteht in der Zusammenstellung clojure Code (lein uberjar) und dann mit diesem jar des Java-Code auf dem Kompilieren classpath.

In der Webapp init habe ich einen Anruf zu einer generierten Klasse, dass Feuer auf einen Swank-Server mit einem (swank/start-repl). Ich möchte in der Lage sein, meinen Aquamacs' Schleim zu diesem Server zu verbinden und arbeite interaktiv von dort (bis zu einem Punkt, ich werde nicht versuchen, nichts, das eine Java-Seite Neuübersetzung erfordert). Aber ich habe eine Situation, dass ich nicht ganz verstehen. Wenn ich einen \M-x slime-connect tun, erhalte ich ein REPL Aufforderung (nachdem er benachrichtigt wird, dass es kein minderwertiger Lisp-Prozess, die ich, es ist ok zu denken, da der untere Lisp-Prozess außerhalb Emacs Steuerung ausgeführt wird). Ich kann Formen perfekt bewerten, und ich kann sogar Dinge wie my.own.namespace/my-var inspiziert. Allerdings, wenn ich eine Datei mit einem bereits kompilierten Code clojure besuchen, kann ich nicht zu machen scheinen Schleim es als seine Quelle zu erkennen. Betrachtet sie eine einfache clojure-Datei:

(ns my.namespace
  (:gen-class
   :name my.namespace
   :methods [#^{:static true} [testFunc [] void]]))

(def *secret* "shhhh")

(defn -testFunc []
  (println (str "our secret is: " secret)))

Unter der Annahme, dass dies in der uberjar durch die Webapp geladen zusammengestellt und enthalten ist, kann ich eval / inspizieren my.namespace/*secret*. Aber wenn ich zu eval innerhalb des Codepuffer versuchen, Slime denkt, ich bin auf dem user Namespace (die auch Sinn machen kann!). Aber jetzt bin ich mit einem Arbeits Option links - ich habe zu bewerten - eine nach der anderen, alle Formulare in der Datei! \C-c \C-l (die Quelldatei laden) nicht nichts tun - offenbar nur nil zurück und gibt nichts anderes. alles Kompilieren scheint genau das zu tun, dass - es kompiliert, zeigen Fehler, wenn er sie findet, wird aber nicht meinen Namespace ändern. Und das seltsamste ist die \C-~ (Sync-Paket und das Verzeichnis), die Common Lisp mit es ist genau das, was ich will, aber hier friert es die clojure REPL für gut.

Es gibt immer die Möglichkeit, auf die REPL Schalt, Typisierung (in-ns 'my.namespace), und dann richtig funktioniert alles. Aber das ist einfach nicht praktisch genug, wenn die clojure Dateien in Anzahl wachsen (wie der Namespace des Codepuffers wird nicht automatisch ändern!)

Meine Frage ist also, ob ich eine grundlegende Befehl / Konfiguration bin fehle - oder wenn es ein offensichtlicher Grund für dieses Verhalten als solches geschehen.

War es hilfreich?

Lösung 3

Ich habe gerade herausgefunden, dass der Täter für dieses Problem zu entfernen: slime-redirect-inferior-output, von schleim repl.el wurde von einem Haken hatte ich ein Setup aufgerufen wird. Es stellt sich heraus, dass es nicht gut spielen, ohne einen minderwertigen-Lisp-Prozess (lesen, einen Protz-Server gestartet aus Emacs).

So eine schnelle Abhilfe Hack ist nur die error Form von dieser Funktion zu entfernen, wie diese . Jetzt der Haken geht, und die Namensräume werden automatisch berechnet. Wie beabsichtigt. Vielen Dank für die Anregungen, dennoch - sie führte mich zu dieser Lösung

!

Andere Tipps

kann ich dein Problem sein Unverständnis, kann aber nicht, dass Sie (bei einem Besuch dieses hypothetische Puffer in Emacs), Hit C-c C-k den Puffer in der aktuellen Clojure Instanz zu kompilieren (was Slime angeschlossen ist)?

Dann wird in den Slime Puffer, wechseln Sie zu diesem Namensraum mit einem (in-ns 'my.namespace). Dann sollten Sie haben Zugang zu dem, was Sie in diesem Namespace zusammengestellt.

Schaltnamensraum automatisch auf der Kompilierung Noch nie war der Standard für Swank-clojure, obwohl es eine optionale Schleim Funktion sein könnte, die Arbeit mit Clojure passiert ist. Aber C-c M-p die repl zu den aktuellen Puffer Namensraum zu wechseln hat immer für mich gearbeitet, und ich habe noch nie von jemand Probleme mit gehört.

Sind Sie mit auf den neuesten stabilen Versionen von Clojure-Modus und schleim repl? Haben Sie Swank-clojure.el installiert? (Sie sollten es nicht brauchen.) Es klingt wie dies aufgrund nicht übereinstimmen Versionen der elisp Libs sein könnte. Wenn das nicht das Problem könnte es ein Aquamacs Fehler sein; Swank-clojure auf die Arbeit mit GNU Emacs entwickelt. Es könnte auch ein Fehler in Schleim, wenn Sie vom Stamm laufen anstatt der neueste elpa Release.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top