前言
JRebel是一个用来热部署Java项目的工具,为什么不用idea自带的ctrl + shift + F9?主要是JRebel还可以热部署更丰富的内容。原理上:前者是自定义 ClassLoader + 字节码增强 + 运行时类替换,具体是:自定义类的加载,且对字节码的转换方式也进行了修改,用更有助于直接替换的方式实现对应的字节码,类似于都换成可替换的参数,这样就可以直接替换,最后监听到文件变化后则替换class文件并更新资源文件;后者底层依赖的是Java HotSwap,JVM HotSwap原理是JVM在不会重新加载类,只是替换方法体字节码。
在此从代码结构、框架层、资源文件的角度进行一个简单的对比:
| 可热部署的类型 | IDEA Ctrl+Shift+F9 | JRebel |
|---|---|---|
| 方法体:就是包含在{}里的方法、逻辑、局部变量,不包括方法的注解、变量的修改之类的,总之还是很多局限的 | ✅ | ✅ |
| 类(bean)文件:“新增/删除/修改”类的“方法/字段”,修改参数、返回值、接口、注解等等,大致就是类结构的修改,此外还有新增删除类 | ❌(只有方法体修改的情况才能更新) | ✅(删除类时部分情况可能需要重启) |
| ORM:Hibernate、MyBatis-Plus、MyBatis等的Entity / Mapper,包括java、mapper.xml | ❌ | ✅ |
| 配置文件:xml/ properties / yml | ❌ | ✅(JRebel是大部分支持,但不是全部,除非使用 Spring Cloud或 Spring DevTools) |
| 页面模板:html/vue/Thymeleaf模板 | ❌(如果加了热部署包,那页面文件也可更新) | ✅(部分框架本身支持) |
下载、激活、配置
1、下载
1.1、idea插件里搜jrebel,下载JRebel and XRebel,下载完成后resart IDEA:
2、激活
2.1、打开设置
打开设置→JRebel & XRebel→点击激活按钮:
2.2、贴地址+密码
去这里复制激活地址和密码(该链接下面那个无限试用命令,需要用至少java11执行那个java文件,可以单独下载那个文件再执行,也可以直接用它给的命令执行,这个命令的意思是:把原来的地址、密码等数据清空,变成初始的未使用的状态;然后就是其实用该链接里直接给的的地址和邮箱也可,虽然激活后会显示当日过期,但是第二天会自动刷新,又变成当日过期,也相当于无限使用了,至少我这里是这样的),然后回到idea贴上去点Activate按钮,然后好像会弹出其他窗口,一直点下去就好了,至此激活成功:
3、其他配置
3.1、设置jrebel自动编译
3.2、打开运行时编译,Settings→Advanced Settings, 找到右侧的Compiler选项,勾选允许自动 make,旧版本的idea好像没有这玩意,没有的这个话就不管了不勾了:
3.3、这个可选,setting → Compile → Build project automatically → 选中,另外setting → Compile →Resource patterns可以加上`;!?*.xml`:
4、其他
4.1、有说法说还需要配置下面的第一个图,参考官方解释(具体看下面的第二个图),这个主要是为了关联项目id和其class文件的,其实我这里不勾上也能对应的上,勾上最好吧,就勾上自己需要热部署的项目即可:
4.2、设置离线使用JRebel:现在这块好像没法配置,我点击work online没反应,这个是用来以防更新失效,激活地址可以用前面的地址链接,每日会自动刷新过期时间,或者使用无限试用,所以可以不配置。
4.3、可以在setting→ JRebel & XRebel→Statistics设置手动重新部署应用程序所需的平均时间,及热部署时间。
使用
根据需要,选择使用jrebel的build还是debug(怎么看启动的是不是jrebel,启动后看控制台最上面有没有输出一大堆的jrebel日志即可):
拓展
热部署的方式还可以:HotswapAgent + DCEVM,感兴趣的可以了解下。