Clojure lein应用程序和库的lein repl命名空间存在差异?

Clojure lein应用程序和库的lein repl命名空间存在差异?,clojure,leiningen,Clojure,Leiningen,当我创建了一个lein新应用程序…时,我可以从我的命名空间调用lein repl中的函数。但是当我通过leinnew…创建一个库项目时,我似乎无法调用leinrepl中的函数。详情如下: 当我创建一个lein应用程序时,比如说lein new app my app,然后从项目目录(包含project.clj)执行lein repl。repl将我留在名称空间my app.core my-app.core=> 现在,我可以调用repl中的函数,甚至可以调用侧文件中定义的函数 my-app.

当我创建了一个
lein新应用程序…
时,我可以从我的命名空间调用
lein repl中的函数。但是当我通过
leinnew…
创建一个库项目时,我似乎无法调用
leinrepl
中的函数。详情如下:

当我创建一个lein应用程序时,比如说
lein new app my app
,然后从项目目录(包含
project.clj
)执行
lein repl
。repl将我留在名称空间
my app.core

my-app.core=> 
现在,我可以调用repl中的函数,甚至可以调用侧文件中定义的函数

my-app.core=> (-main)
; Hello, world!
my-app.core=> (my-app.anotherfile/foo)
; Hey, there; this is foo from anotherfile
只要我
:在
core.clj
的ns宏中需要[my app.anotherfile]

好,太好了,;现在我想对lein库做类似的处理。所以我
lein new my lib
,然后
lein repl
,我在
user
命名空间中:

user=> 
嗯?好的,我的lib包含了一个我想要调用的函数(这只是leiningen默认创建的函数)

我试着

user=> (in-ns 'my-lib.core)
my-lib.core=> (foo 42)
; CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo in this context, compiling:(NO_SOURCE_PATH:1:1) 
没有。这个怎么样

user=> (my-lib.core/foo 42)
; ClassNotFoundException two-files-lib.core  java.net.URLClassLoader$1.run (URLClassLoader.java:202
啊哈!不同的错误,但仍然无法治愈
lein compile
lein javac
似乎也没有做任何事情


我无法在文档或在线中找到或推断出正确的咒语,如果您能提供建议,我将不胜感激。

在默认的
lein new
项目中,您需要
明确要求
您希望使用的名称空间--
(需要'my lib.core)
只需创建给定名称的新空名称空间,如果该名称空间不存在,则不会从类路径加载任何代码

应用程序项目会自动执行此操作,并切换到REPL任务中的主命名空间,因为默认情况下,它们的
项目.clj
中有一个
:main foo.core
条目。对于库可以这样做,但不应该这样做——作为一个副作用,它会导致主命名空间的AOT编译,这通常是不可取的

相反,在lein2中,您可以使用
:repl选项{:init ns my lib.core}

user=> (my-lib.core/foo 42)
; ClassNotFoundException two-files-lib.core  java.net.URLClassLoader$1.run (URLClassLoader.java:202