JRebel实践 part1 configuration

Oct 23, 2010

在这个星期开始了兴奋的编码,之前的每周都是session讲座,一天到晚都是坐着听讲座还真的是困到不行,这周终于开始了编码. 这一周开始了在Chronicle项目编码,在实现第一个story的时候,发现这个每一次我更改了.java的文件,比如我改动了一下controller层或者service层抑或是DAO层的代码,我不得不重重新编译,部署,然后重新启动jetty ,这个过程有时候非常的令人烦恼,严重影响了你的编码节奏,更加于公司的价值观之一"rapid feedback"相冲突. 于是我搜索了一下,想起来过去在大学的时候也有一个项目,项目特别大,以至于你只改了.java文件的一行代码,但是需要发费十几分钟时间来部署重启服务器,那是相当的痛苦,于是当时搜索了一下,发现了JavaRebel,那时候还不是叫JRebel,而且当时是免费的 ,我当时试着配置了一下但是仅仅局限于小小demo案例,并没有成功的应用到项目中,依稀记得配置不是特别清楚. 下面是引用自zeroturnaround官网的一个视频,非常有趣: 顺便提到JavaRebel因其显著的节省了开发人员的时间来获得Jolt Award 生产力大奖.Jolt Award这个奖可是说是一个标杆,每年都会评选一些奖项,比如书籍工具等等,几乎代表着行业的方向,比如Programming Scala(我最近在看Clojure,我很好奇为什么没有将Clojure算进去) ,还有一本<<Emergent Design: The Evolutionary Nature of Professional Software Development>> 也是Jolt大奖的获奖图书.所以每年花点时间在上面是非常值得的,可以帮助你了解前沿的技术和工具,帮助提高效率,强烈推荐. 回到主题,这一次我决定使用JRebel,这一次我花了比较多的时间来摆弄配置.现在的环境是Mac上面使用IntelliJ作为IDE,同时使用Jetty作为服务器,Ant作为构建工具.整个流程是, 第一步:找到build.xml中启动Jetty的代码,添加JVM参数.(现不讨论它的工作机制)
<jvmarg line="-noverify -javaagent:/Users/twer/jrebel.jar" />
你需要设定-javaagent到你的jrebel.jar所在的路径,我这里只是做测试spike. 第二步:你需要给你的IDE按照JRebel的插件,用来产生rebel.xml的描述,来描述你想监视的目录.我想说得显然的是JRebel插件在我的电脑上不管用,产生的rebel.xml文件都是空的,需要自己来写. 你需要将rebel.xml放在你平常放.properties文件的目录,也就是src目录下.下面是我的描述文件:
<?xml version="1.0" encoding="UTF-8"?>
<application
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.zeroturnaround.com"
xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">
<classpath>
<dir name="/Users/twer/Workspace/TWU/chronicles/web/WEB-INF/classes">
<!-- Only include package1 and its subpackages -->
<include name="chronicles/**"/>
</dir>
</classpath>
</application>
显然dir也就是你想监视的目录显然不应该像上面一样硬编码,而且我只想监视WEB-INF/classes下的chronicles目录下的文件. 第三步: 实现到现在后,你还需要首先开启"编译时同时编译所依赖的文件" 选项,这个选项在"Preference". Make sure all dependent files are also compiled. Settings-->Project Setting--> Compiler -->Honor dependencies on  command 第四步:你还需要修改你项目的编译的输出路径, change the output of compile on Module Settings "Module"->"Paths"->check "Use module compile output path"  将其输出路径指向你在rebel.xml所监视的目录. 第五步:到这一步,你基本上基本配置完成了,但是每次你修改完.java文件,你本能按下"CTR+S"保存,但是更多的时候希望当你保存时它会自动编译,所以你需要配置你的快捷键, Overwrite default Save to Compile Start using the default compile shortcut Ctrl-Shift-f9 or map it to Ctrl-s (files get still saved). Steps: “File” -->”Settigns” -->”Keymap”  -->in the right window click ”Copy ”--> then find “Main Menu”  and click “File” below it-->Change “Save” to another key --> back to”Main Menu” and click “Build” -->find “Compile” and change key to “Ctr+S” 我有测试发现在controller或者service或是repository层的变化都能在页面上得到显示,现在你可以享受这个快速反馈的乐趣了. 下一部分将潜入进去探讨工作原理.