使用JRebel提供对Java web开发的热部署
Posted in java on 七月 29th, 2010 by kafka0102
这几天在写Java Web页面,开发环境是linux+eclipse+maven+jetty。开发java web最烦的就是改个文件需要重启web server,尽管现在的web server(比如小野猫)支持了热部署,不过其实现相当于重启了web server,如果文件多些初始化复杂些,重启的时间也够受的。对于开发的IDE来说,myeclipse是个不错的选择,它能对修改的文件自动部署到web server(eclipse wtp就没做这个支持,但我们也可以投机的对部署目录和开发目录做个软链),不过我试用了其最新的8.5版本,在本本上响应速度有些迟缓,影响编码情绪。而且,因为环境需要,最后开发环境定位eclipse+maven+jetty(maven提供了jetty的plugin用于开发测试),并且找到了JRebel这个强悍的能提供对Web server的热部署的工具,它不像web server那样需要重启服务,而是动态的加载修改的文件,所以反应速度上要好很多,它除了可以热加载class、jsp文件,也可以是spring、hibernate等配置文件。
可以从 jrebel 得到JRebel,它不是个免费软件,但有30天的试用期,所以我先混个月再说。如果你使用eclipse wtp,可以参考eclipse-jrebel-tutorial来安装使用之。下面列出linux+eclipse+maven+jetty环境中的安装步骤(我没有在其网站上找到完整的安装步骤):
1、从http://www.zeroturnaround.com/jrebel/current/下载最新的JRebel安装包,根据readme.txt中的说明安装JRebel,我的安装路径是:/home/kafka/tools/jrebel。
2、修改项目的pom.xml文件,将已有的jetty plugin配置修改成:
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <configuration> <scanIntervalSeconds>0</scanIntervalSeconds> </configuration> </plugin>
在<build><plugins>中加入:
<plugin> <groupId>org.zeroturnaround</groupId> <artifactId>javarebel-maven-plugin</artifactId> <executions> <execution> <id>generate-rebel-xml</id> <phase>process-resources</phase> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin>
然后运行mvn javarebel:generate。可以在target/classes路径中看到新生成的rebel.xml。也可以参考http://www.zeroturnaround.com/jrebel/configuration/maven/做更多了解。
3、修改环境变量MAVEN_OPTS。我这是个人单机,所以直接在.bashrc中配置:export MAVEN_OPTS=”-noverify -javaagent:/home/kafka/tools/JRebel/jrebel.jar”,javaagent指定的就是刚才jrebel.jar安装的路径。
4、好了,可以收工了。运行mvn jetty:run,在启动信息中可以看到jrebel相关的信息。后续对文件的修改也可以在console上看到jrebel reloading相应文件的信息。
浏览JRebel网站,发现几篇很好的文章 http://www.zeroturnaround.com/blog/reloading-objects-classes-classloaders/ ,是关于JRebel的实现原理、Classloader及Web server热部署的实现原理方面的。最近也在看terracotta dso,其和JRebel都用到了java instrument,有时间好好琢磨琢磨。
=============================== 华丽的终止符 ================================
相关日志
留下评论