2017-04-26 7 views
1

Ich habe sehr seltsames Leins Verhalten: Es lädt immer noch nicht existierenden alten Code.Leiningen behält alte Definitionen

Es gibt src Verzeichnis mit etwas wie src/service/api.clj und src/user.clj. Alle Dateien unter src/service werden neu geladen, aber ignoriert alle Änderungen in src/user.clj.

(ns user 
    (:require [ragtime.jdbc :as jdbc] 
      [ragtime.repl :as repl])) 
... 

(defn migrate [] 
    (repl/migrate (load-config))) 

Auch wenn ich migrate Definition löschen, wird REPL haben es in user Namespace, lein es mit lein run -m user/migrate laufen nach lein clean tun und nicht mit (load-file "src/user.clj") zu Änderungen laden.

Wie kann ich meine Änderungen auf user.clj laden?

Antwort

0

Lein sucht nur nach Code in Quellpfadverzeichnissen. Wenn Sie keine Angabe haben, wird src angenommen. In Ihrem project.clj wäre dies der vorgeschlagene Eintrag:

:source-paths ["dev" "src"] 

zu können Code aus dem REPL nachladen dies für user.clj arbeiten:

(ns user 
    (:require [clojure.tools.namespace.repl :refer (refresh refresh-all)] 
      [clojure.stacktrace] 
      [clojure.pprint :as pp])) 

;; 
;; To run open a REPL and: 
;; (reset) 
;; (core/migrate) 
;; Repeat those two commands after every source code change you make 
;; 
(defn reset [] 
    (refresh)) 

user.clj unter dem dev Verzeichnis gehen.

Die Antwort auf Ihre Frage ist, ich denke, dass user.clj soll so selten geändert werden, dass der Neustart der JVM/REPL kein Problem ist, nachdem Sie Änderungen vorgenommen haben. Code, der häufig geändert wird, sollte sich unter dem Verzeichnis src befinden und sollte nicht als Namespace user benannt werden. Der Haupt Einstiegspunkt-Code, den Sie normalerweise in einer Datei haben, die core.clj genannt wird. Sie sollten also den Inhalt Ihrer user.clj-Datei in den core-Namespace schreiben, d. H. In eine Datei mit der Bezeichnung core.clj, die unter src steht.

+0

Aber 'user.clj' ist unter' src' bereits – fevgenym

+2

'user' ist ein spezieller Namespace, der nicht für Einsprungbefehle wie zum Beispiel' migrate' geeignet ist. Versuchen Sie, Ihren 'Benutzer' in' Kern' umzubenennen. Das wäre ein konventionellerer Ansatz. –