将Clojure/Scala REPL连接到正在运行的JVM

27
我有一个Java Web应用程序正在Sun Java 6 JVM下的Tomcat中运行。是否有办法将Scala或Clojure REPL附加到正在运行的JVM上?
一旦Web应用程序启动并运行,调用所在的上下文已经在运行的虚拟机中设置好了。因此,这对于调用任意Java方法进行增量、探索性开发和调试非常有帮助。
4个回答

22

根据您的要求,从其他问题中复制答案:

liverepl:将Clojure REPL连接到正在运行的Java或Clojure进程,无需任何特殊设置

来自该网站: 启动一个Clojure REPL,连接到任何正在运行的Java或Clojure进程, 无需预先进行任何特殊设置。 现在支持连接到Tomcat web应用程序。 您可以使用repl运行代码、检查变量和重新定义Clojure函数。

https://github.com/djpowell/liverepl


7
没有办法将REPL附加到已运行的JVM上,因此您需要倒退思考问题...在服务器上启动REPL,可以在程序启动时或响应入站客户端连接(例如使用Telnet)时启动。这里有一个很好的例子:http://blog.homecloud.ca/2010/03/scripster-interactive-scala-repl-using.html。您还可以在服务器上托管Interpreter实例,然后公开Web界面。这是http://www.simplyscala.com/所采取的方法。
如果您想进行调试,则最好使用以下答案:Drop into interpreter during arbitrary scala code location

1
根据之前类似问题的答案http://stackoverflow.com/questions/4131006/attach-a-clojure-repl-to-a-running-jvm,看起来是可能的,至少Clojure REPL(我想Scala也是如此)。 - jneira
我认为这个答案很好地展示了替代方案,而且在写这篇文章的时候,Scala 没有这种做法的选项,但是现在似乎 https://github.com/ngocdaothanh/scalive 可以提供类似的解决方案。 - Gábor Bakos
我开始觉得我有一个跟踪者了...对于这个问题和我的其他一些回答的踩根本没有任何道理。 - Kevin Wright

6
你可以使用这个:https://github.com/wirde/swank-inject 它允许你将Clojure repl附加到正在运行的启用了远程调试的Java进程上。
此外,你还可以指定一些类(单例),这些类的实例将被找到并绑定到可在repl中使用的符号上。

1

如果要将Scala REPL连接到其他的JVM,请查看Scalive


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