Clojure 莱宁根保留着老德芬
我对Lein的行为感到非常奇怪:它一直在加载不存在的旧代码 有Clojure 莱宁根保留着老德芬,clojure,leiningen,Clojure,Leiningen,我对Lein的行为感到非常奇怪:它一直在加载不存在的旧代码 有src目录,其中包含类似src/service/api.clj和src/user.clj的内容。src/service下的所有文件都在重新加载,但是lein完全忽略了src/user.clj中的任何更改 (ns user (:require [ragtime.jdbc :as jdbc] [ragtime.repl :as repl])) ... (defn migrate [] (repl/migr
src
目录,其中包含类似src/service/api.clj
和src/user.clj
的内容。src/service
下的所有文件都在重新加载,但是lein完全忽略了src/user.clj
中的任何更改
(ns user
(:require [ragtime.jdbc :as jdbc]
[ragtime.repl :as repl]))
...
(defn migrate []
(repl/migrate (load-config)))
即使我删除了migrate
定义,REPL也会将它放在user
名称空间中,lein在执行lein clean
之后将使用lein run-m user/migrate
运行它,并且不会使用加载更改(加载文件“src/user.clj”)
如何将我的更改加载到
user.clj
?Lein只在源路径目录中查找代码。如果您没有任何指定的代码,则假定为src
。在您的project.clj中,这将是建议的条目:
:source-paths ["dev" "src"]
要能够从REPL重新加载代码,这将适用于user.clj
:
(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
可以进入dev
目录下
您的问题的答案是,我认为
user.clj
应该很少被更改,因此在您进行更改后重新启动JVM/REPL不是问题。频繁更改的代码应位于src
目录下,且不应命名为namespaceuser
。您通常使用的主入口点代码位于名为core.clj
的文件中。因此,您应该将user.clj
文件的内容放在core
命名空间中,即放在名为core.clj
的文件中,该文件位于src
下,Lein只在源路径目录中查找代码。如果您没有任何指定的代码,则假定为src
。在您的project.clj中,这将是建议的条目:
:source-paths ["dev" "src"]
要能够从REPL重新加载代码,这将适用于user.clj
:
(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
可以进入dev
目录下
您的问题的答案是,我认为
user.clj
应该很少被更改,因此在您进行更改后重新启动JVM/REPL不是问题。频繁更改的代码应位于src
目录下,且不应命名为namespaceuser
。您通常使用的主入口点代码位于名为core.clj
的文件中。因此,您应该将user.clj
文件的内容放在core
命名空间中,即放在src
下名为core.clj
的文件中。user
是一个特殊的命名空间,不适合您在migrate
中使用的输入命令。尝试将用户
重命名为核心
。这将是一种更为传统的方法。user
是一种特殊的名称空间,不适合于您在migrate
上使用的输入命令。尝试将用户
重命名为核心
。这将是一种更为传统的方法。