【发布时间】:2014-09-16 20:35:59
【问题描述】:
我一直在使用 Java 进行编程,我非常喜欢 Netbeans 和其他 IDE 中的功能,它允许您在调试时对程序进行更改,而无需重新启动它。我正在用 Java 编写一个应用程序,如果我可以即时更新它而无需重新启动它,这将受益。我有一个想法,有第二个 jar 可以在更新时运行,它可以做与 IDE 相同的事情,但我不知道他们如何交换代码。任何人都可以启发我吗?谢谢!
【问题讨论】:
标签: java
我一直在使用 Java 进行编程,我非常喜欢 Netbeans 和其他 IDE 中的功能,它允许您在调试时对程序进行更改,而无需重新启动它。我正在用 Java 编写一个应用程序,如果我可以即时更新它而无需重新启动它,这将受益。我有一个想法,有第二个 jar 可以在更新时运行,它可以做与 IDE 相同的事情,但我不知道他们如何交换代码。任何人都可以启发我吗?谢谢!
【问题讨论】:
标签: java
Eclipse 等IDE,在调试时使用JDI(Java 调试接口)。它是 Java API 的集合,允许您创建/附加到外部 Java 虚拟机。这可以与可用于在虚拟机中重新定义类的 Java 代理结合使用。 Eclipse 在调试模式下所做的是创建一个新的虚拟机,并在其中运行您的代码。当您进行编辑并重新编译时;然后,eclipse 告诉 JVM 通过发送新的字节码来重新定义您更改的类。
您可以阅读JDI documentation,并特别查看Java instrument class(用于配置类转换器)。这是setting up a JDI launcher 上的一个相关问题(启动一个新的JVM)。
【讨论】:
我今天实际上正在学习同样的事情@work。我发现这篇文章非常有助于理解一些更复杂的热推送案例背后的工作流程:
http://java.dzone.com/articles/5-jrebel-features-you-couldn%E2%80%99t
【讨论】: