【问题标题】:How to compile namespace in remote REPL如何在远程 REPL 中编译命名空间
【发布时间】:2014-04-16 11:12:56
【问题描述】:

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

  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) 
    

我有以下异常:

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

现在我希望编译调用在服务器而不是客户端上执行。能做到吗?

谢谢

【问题讨论】:

    标签: clojure nrepl


    【解决方案1】:

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

    1. 使用lein new remote 创建一个新项目。
    2. 更改当前目录cd remote
    3. 使用lein repl :headless从项目文件夹启动nREPL服务器(我现在意识到这也与您的描述不同)
    4. 打开一个新控制台并在~/. 中启动nREPL 客户端lein repl :connect localhost:port/repl
    5. ~/remote/src/remote/one.clj 中的ns 创建文件。
    6. 来自客户端评估(compile 'remote.one)

    (使用Leiningen 2.3.4 on Java 1.7.0 Java HotSpot(TM) 64-Bit Server VMClojure 1.5.1)。

    【讨论】:

    • 远程REPL是在项目文件夹中启动的,我只是在描述中省略了这一步。您是否从同一文件夹启动客户端?为了清楚起见,我在客户端进程中遇到了异常。
    • @Janos 刚刚更新了答案,因为我意识到我实际上使用 :headless 标志启动了 nREPL 服务器。
    • 对我不起作用:(它仍然在临时文件夹中查找 clj 文件。但是,如果我在同一目录(项目的目录)中启动客户端,那么它工作正常. 当然,这不是一个选项。
    • 将使用 JDK 1.7 进行尝试,并告诉您进展如何。
    • Juan,您确定您没有在项目文件夹中启动客户端 repl 吗? (我还是会尝试 1.7 JDK)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2023-03-12
    • 2012-01-08
    • 2015-06-01
    相关资源
    最近更新 更多