我一直在使用Java编程,我非常喜欢Netbeans和其他IDE中的功能,可以在调试程序时进行更改而无需重新启动。我正在用Java编写一个应用程序,如果能够在不重新启动的情况下更新它,那将会很有帮助。我想到了一个主意,可以运行第二个jar文件进行更新,该文件能够做到与IDE相同的事情,但我不知道他们是如何交换代码的。请问有人能给我一些启示吗?谢谢!
我一直在使用Java编程,我非常喜欢Netbeans和其他IDE中的功能,可以在调试程序时进行更改而无需重新启动。我正在用Java编写一个应用程序,如果能够在不重新启动的情况下更新它,那将会很有帮助。我想到了一个主意,可以运行第二个jar文件进行更新,该文件能够做到与IDE相同的事情,但我不知道他们是如何交换代码的。请问有人能给我一些启示吗?谢谢!
像Eclipse这样的IDE,在调试时使用JDI(Java debug interface)。它是一组Java API,允许您创建/附加到外部Java虚拟机。这可以与Java Agent结合使用,用于重新定义虚拟机中的类。在调试模式下,Eclipse会创建一个运行您代码的新虚拟机。当您进行编辑和重新编译时,Eclipse会通过发送新的字节码告诉JVM重新定义您已更改的类。
您可以阅读JDI文档,并查看Java instrument类(用于配置类转换器)的相关信息。这里有一个关于设置JDI启动器(启动新JVM)的相关问题。
我今天在工作中也在学习同样的事情。我发现这篇文章对于理解一些更复杂的热推送案例背后的工作流程非常有帮助:
http://java.dzone.com/articles/5-jrebel-features-you-couldn%E2%80%99t