【问题标题】:Attach a clojure / scala repl to a running JVM将 clojure / scala repl 附加到正在运行的 JVM
【发布时间】:2011-05-07 02:07:28
【问题描述】:

我有一个在 Sun java 6 JVM 中的 tomcat 下运行的 java web 应用程序。有没有办法将 scala 或 clojure REPL 附加到正在运行的 JVM ?

一旦 webapp 启动并运行,将在其中进行调用的上下文已经在运行的 VM 中设置好了。因此,这对于调用任意 Java 方法调用以进行增量、探索性开发和调试非常有帮助。

【问题讨论】:

    标签: java scala clojure jvm read-eval-print-loop


    【解决方案1】:

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

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

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

    https://github.com/djpowell/liverepl

    【讨论】:

      【解决方案2】:

      没有办法将 REPL 附加到已经运行的 JVM,因此您需要倒过来考虑问题...

      在程序启动时或响应入站客户端连接(使用例如 Telnet)时,在服务器上启动 REPL。

      这里有一个很好的例子:http://blog.homecloud.ca/2010/03/scripster-interactive-scala-repl-using.html

      您还可以在您的服务器中托管一个解释器实例,然后公开一个 Web 界面。这是http://www.simplyscala.com/采取的方法


      如果您正在考虑调试,那么这个答案会更好地为您服务:Drop into interpreter during arbitrary scala code location

      【讨论】:

      • 按照上一个类似问题stackoverflow.com/questions/4131006/… 中的答案,似乎有可能,至少是一个clojure repl(我想也是scala)
      • 我认为这个答案很好地展示了替代方案,并且在撰写本文时没有选择在 Scala 中做这种事情,但现在看来github.com/ngocdaothanh/scalive 可以提供类似的解决方案。跨度>
      • 我开始认为我有一个跟踪者......对此的反对意见和我的其他一些答案毫无意义。
      【解决方案3】:

      你可以这样使用: https://github.com/wirde/swank-inject

      允许您将 Clojure repl 附加到正在运行的 java 进程(启用远程调试)。

      您还可以指定多个类(单例),它们的实例将被找到并绑定到 repl 中可用的符号。

      【讨论】:

        【解决方案4】:

        对于连接其他 JVM 的 Scala REPL,请查看 Scalive

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-11-28
          • 2018-12-30
          • 2019-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多