JDK扩展DCEVM让WEB程序完全不重启调试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK扩展DCEVM让WEB程序完全不重启调试相关的知识,希望对你有一定的参考价值。

JDK扩展DCEVM让WEB程序完全不重启调试

转自:http://acooly.iteye.com/blog/1777119

 

目前JDK默认支持对方法体内部的修改,可以重新自动加载。所以在WEB工程中,可以不重启WEB容器的情况下修改方法体内部的实现,进行程序调试。但是很多时候需要新增实例变量和方法,这个时候,默认的JDK就不能支持。

 

这里推荐一个动态代码扩展的VM:The Dynamic Code Evolution Virtual Machine,可以实现不重启WEB容器的情况下,新增实例变量和方法,并动态reload后进行调试。

官方下载:http://ssw.jku.at/dcevm/binaries/

官方介绍:

The Dynamic Code Evolution Virtual Machine (DCE VM) is a modification of the Java HotSpot(TM) VM that allows unlimited redefinition of loaded classes at runtime. The current hotswapping mechanism of the HotSpot(TM) VM allows only changing method bodies. Our enhanced VM allows adding and removing fields and methods as well as changes to the super types of a class.

 

一般开发环境是windows 较多,下载WIN版本进行配置。

官方说JDK1.6的update26不兼容,之后的应该都可以,我使用update29是OK的。

我测试发现,直接使用JDK1.6_update29或以上的几个版本,使用Jetty和tomcat都可以实现实例变量和方法级的变更自动reload。但是Eclipse3.7版本IDE对修改后的JDK不兼容。所以,这里采用的方案是,ECLIPSE-IDC使用独立的原生JDK,开发工程和调试器使用扩展后的JDK,所以这里使用2个JDK。

配置方案:

  • ECLIPSE-IDE运行环境:jdk1.6.0_38 (原生)
  • 工程使用的编译环境和调试环境:jdk1.6.0_29(dcevm扩展)

 

1.安装2个JDK

首先安装两个JDK版本,要求在JDK1.6update26以上,官方推荐JDK1.7,但是我还是暂时使用JDK1.6版本。怎么安装这里就省略了。我分别安装的是JDK1.6的update29和update38,统一安装在d:\tools\java下面。安装目录分别为:D:\tools\java\jdk1.6.0_29和D:\tools\java\jdk1.6.0_38。

 

2.配置环境变量

配置操作系统JAVA环境变量,用于IDE或JAVA程序的运行时环境。

JAVA_HOME=D:\tools\java\jdk1.6.0_38

PATH=%JAVA_HOME%\bin;...

 

3.安装dcevm扩展到编译和调试JDK

运行dcevm扩展jdk1.6.0_29,用于工程编译和调试JDK。

进入已经下载的dcevm-*-win.jar所在目录,运行启动配置界面。

E:\tools\develop\java > java -jar dcevm-0.2-win.jar

会弹出安装界面,直接点击对应的JDK和JRE,然后点击安装即可。安装程序会备份原始JDK的 bin/client/jvm.dll and bin/server/jvm.dll文件,并使用一个修改版本替换,然后添加dcevm.jar到lib/ext/下,实现原始JVM的扩展。而且这个可以卸载和还原的。 

 

下图所示,我操作系统中安装了多个JDK,选择作为工程编译和调试的jdk1.6.0_29版本安装dcevm,然后点击“Test Instanllation”测试,测试通过即可,如果以后不想使用或换版本,可以卸载还原。

技术分享
 

4.打开ECLIPSE-IDC进行配置

配置工程编译的JDK和JRE,这里选择已经dcevm扩展后的jdk1.6.0_29

技术分享
 
技术分享
 

  如果使用maven+jetty的方式调试,则配置调试的JDK选择jdk1.6.0_29(dcevm)


技术分享
 

如果使用tomcat插件,则配置VM选项为jdk1.6.0_29(dcevm)


技术分享
 技术分享

好了,配置完成,你可以直接使用你喜欢的方式调试工程,最重要的是修改调试的JDK为dcevm扩展版本。

 

最后, 最好只用在开发环境,很方便,很快,生产环境就算了哈。

希望对你又帮助!~

以上是关于JDK扩展DCEVM让WEB程序完全不重启调试的主要内容,如果未能解决你的问题,请参考以下文章

调试时 Flutter VS Code 中的热重启(以前是完全重启)

Minecraft Mod 开发实用工具

为啥ios设置启动图不显示不出来

Azure Web 应用程序随机重启 - 任何人都可以扩展此建议吗?

vs2013调试崩溃,重启电脑依旧崩溃

不使用 IE 进行调试时,将空引用指针传递给存根