如何从leiningen或boot启动Clojure 1.8的socket REPL?

10

Leiningen会自动在一个socket上启动repl。查看它在启动时打印的横幅,以查看它选择了哪个。 - dsm
@dsm 作者谈论的是 Clojure 1.8 中的新套接字 REPL,而不是 Leiningen 的 REPL。 - Daniel Compton
2个回答

17

要启动一个 Socket REPL,你需要将这个选项传递给 JVM。

-Dclojure.server.repl="{:port 5555 :accept clojure.core.server/repl}"

在Leiningen中,将以下内容添加到您的project.clj文件中。

:jvm-opts ["-Dclojure.server.repl={:port 5555 :accept clojure.core.server/repl}"] ; notice that the map is not quoted.

在 Boot 中,导出环境变量 BOOT_JVM_OPTIONS

export BOOT_JVM_OPTIONS='-Dclojure.server.repl="{:port 5555 :accept clojure.core.server/repl}"'

一旦您的REPL正在运行,您可以从不同的终端运行telnet以连接到套接字REPL。REPLception!

$ telnet 127.0.0.1 5555
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
user=> (+ 1 1)
2
user=>

对于“export”作为Linux命令并且我知道如何使用,这很清楚。但是对于"lein",你要使用“:jvm-opts…”,我应该把它放在project.clj文件中吗? - Daniel Wu

2

boot即将推出一个名为socket-server的任务。截至boot 2.7.1版本,尚未发布包含此任务的版本。

与此同时,您可以使用以下命令启动Socket REPL。使用boot在端口50505上启动一个Clojure进程并监听Socket REPL,请使用:

boot -i "(do (require 'clojure.core.server) (clojure.core.server/start-server {:port 50505 :name :repl :accept 'clojure.core.server/repl}))" wait

使用Leiningen:

JVM_OPTS='-Dclojure.server.myrepl={:port,50505,:accept,clojure.core.server/repl}' lein repl

使用一个打包好的 Clojure jar 文件:

java -Dclojure.server.myrepl="{:port 50505 :accept clojure.core.server/repl}" -jar ~/.m2/repository/org/clojure/clojure/1.8.0/clojure-1.8.0.jar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接