Clojure 莱宁根保留着老德芬

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

我对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/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
上使用的输入命令。尝试将
用户
重命名为
核心
。这将是一种更为传统的方法。