如果您有一个包含 git 依赖项的 deps.edn
项目,在该项目中您也使用了 clojure.tools.namespace.repl/refresh
,那么默认情况下,refresh
调用将加载和刷新您的 git 依赖项中的所有 Clojure 命名空间。
我认为它是这样做的,因为在 tools.deps 出现之前,所有库依赖项基本上都作为 jars 分发,所以它会假设类路径中的任何目录都包含您项目的源代码,并且会从通过刷新重新加载中受益。
tools.deps 项目的此假设发生了变化,因为依赖项现在可以存储在 ~/.gitlibs
目录中的文件系统上。这些依赖项基本上被误认为是项目依赖项,都被加载和刷新,即使您的项目实际上并没有 require
它们。
考虑到 ~/.gitlibs
是版本化的并且旨在不可变,因此自动需要和刷新它们从理论上讲并不是很有意义。
这很容易避免,只需包含一个调用以明确设置您的项目刷新目录,如下所示:(tnsrepl/set-refresh-dirs "src" "test")
,但是我 wondering 如果 tools.namespace 默认排除 ~/.gitlibs
下的所有内容会更好,因为 tools.namespace 的起始/默认假设不再成立。
注意:这可能与此问题有关。