使用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,有时间好好琢磨琢磨。


=============================== 华丽的终止符 ================================

本文作者:kafka0102,转载文章请注明来源,谢谢!!
本文链接:http://www.kafka0102.com/2010/07/258.html


相关日志


留下评论

说明:评论需要审核通过才能显示