【发布时间】:2021-03-13 21:57:37
【问题描述】:
我有兴趣在 Clojure 中重新加载 Java 类,例如在 REPL 中。
如果一个 Java 类之前已经被加载和使用过,之后又被更改和重新编译,是否可以重新加载新更新的类?
我已经进行了一些搜索(例如,How does clojure class reloading work?),但还没有找到明确的方法。
谢谢。
【问题讨论】:
我有兴趣在 Clojure 中重新加载 Java 类,例如在 REPL 中。
如果一个 Java 类之前已经被加载和使用过,之后又被更改和重新编译,是否可以重新加载新更新的类?
我已经进行了一些搜索(例如,How does clojure class reloading work?),但还没有找到明确的方法。
谢谢。
【问题讨论】:
您可以使用可与 Clojure 一起使用的修改后的 JVM,DCEVM。我做了一个small project 来演示如何设置它。当 Java 类更新时,DCEVM 将自动重新加载正在运行的 JVM 进程中的 Java 类。 DCEVM 的好处是您不必为此付费。 DCEVM 似乎大部分时间都在工作,但并非总是如此。有时我必须重新启动 REPL 才能加载新的类。
在使用 DCEVM 之前,我尝试过 JRebel。就像 DCEVM 一样,JRebel 也会重新加载 Java 类。根据我的经验,JRebel 的工作比 DCEVM 可靠得多,但不幸的是,它的购买成本相当昂贵。不过,您可以在有限的时间内免费试用。
更新:我也找到了this answer,这似乎与我写的关于 DCEVM 与 JRebel 的内容非常一致。
【讨论】: