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