Clojure 如何在远程REPL中编译名称空间
我在编译驻留在运行nREPL服务器进程的项目中的Clojure 如何在远程REPL中编译名称空间,clojure,nrepl,Clojure,Nrepl,我在编译驻留在运行nREPL服务器进程的项目中的.clj文件时遇到问题: 我使用lein new xxx创建了一个新项目 在项目文件夹中,我通过leinrepl启动了一个nREPL 在另一个终端窗口中,我启动了一个客户端lein repl:connectlocalhost:12345/repl 我创建了一个简单的名称空间文件,并将其保存在项目中的适当位置: (ns remote.one) (def foo 42) 现在在客户端上,我调用了这个函数 (compile 'remote.one)
.clj
文件时遇到问题:
lein new xxx
创建了一个新项目李>
leinrepl
启动了一个nREPL李>
lein repl:connectlocalhost:12345/repl
(ns remote.one)
(def foo 42)
(compile 'remote.one)
CompilerException java.lang.ClassNotFoundException: remote.one, compiling:(C:\Users\xxx\AppData\Local\Temp\form-init2429492334116477513.clj:1:1)
现在,我希望编译调用在服务器上执行,而不是在客户机上执行。能做到吗
谢谢我刚试过,效果不错。在我第一次尝试时,我错过了一个步骤:将当前目录设置为项目的目录。我看到你的描述中也缺少了这一步,也许这就是它在你的案例中不起作用的原因
lein new remote
创建一个新项目cd-remote
lein repl:headless
从项目文件夹启动nREPL服务器(我现在意识到这与您的描述也不同)~/.
中启动nREPL客户端lein repl:connect localhost:port/repl
~/remote/src/remote/one.clj
中为ns创建文件(编译'remote.one)
(使用Java 1.7.0 Java HotSpot(TM)64位服务器VM上的
Leiningen 2.3.4
和Clojure 1.5.1
)。远程REPL是在项目文件夹中启动的,我只是在描述中省略了该步骤。您是否从同一文件夹启动客户端?为了清楚起见,我在客户端进程中遇到了异常。@Janos刚刚更新了答案,因为我意识到我实际上使用:headless
标志启动了nREPL服务器。对我来说不起作用:(它仍然在temp文件夹中查找clj文件。但是,如果我在同一目录(项目的目录)中启动客户端然后它工作正常。当然,这不是一个选项。我将使用JDK1.7进行尝试,并让您知道它是如何运行的。Juan,您确定您没有启动项目文件夹中的客户端repl吗?(我仍将尝试使用1.7 JDK)