如何在远程REPL中编译命名空间

时间:2014-03-12 11:03:07

标签: clojure nrepl

我在编译.clj文件时遇到问题,这些文件驻留在我运行nREPL服务器进程的项目中:

  1. 我使用lein new xxx创建了一个新项目。
  2. 在项目文件夹中,我按lein repl启动了nREPL。
  3. 在另一个终端窗口中,我启动了一个客户端lein repl :connect localhost:12345/repl
  4. 我创建了一个简单的命名空间文件,并将其保存在项目中的适当位置:

    (ns remote.one)
    (def foo 42)
    
  5. 现在在客户端上我调用了这个函数

    (compile 'remote.one) 
    
  6. 我有以下例外:

    CompilerException java.lang.ClassNotFoundException: remote.one, compiling:(C:\Users\xxx\AppData\Local\Temp\form-init2429492334116477513.clj:1:1)
    

    现在我原本期望编译调用在不在客户端的服务器上执行。它可以完成吗?

    由于

1 个答案:

答案 0 :(得分:1)

我刚尝试过,它对我有用。我第一次尝试时发生的事情是我错过了一步:将当前目录设置为项目。我看到你的描述中也缺少这个步骤,也许这就是它在你的情况下不起作用的原因。

  1. 使用lein new remote创建新项目。
  2. 更改当前目录cd remote
  3. 使用lein repl :headless 从项目文件夹启动nREPL服务器(我现在意识到这也与您的描述不同)
  4. 打开一个新控制台,在lein repl :connect localhost:port/repl中启动nREPL客户端~/.
  5. ~/remote/src/remote/one.clj
  6. 中为ns创建文件
  7. 从客户评估(compile 'remote.one)
  8. (使用Leiningen 2.3.4 on Java 1.7.0 Java HotSpot(TM) 64-Bit Server VMClojure 1.5.1)。