IntelliJ IDEA 2020 JRebel破解
IDEA 安装好最新版的JRebel之后。剩下的就是激活这一步,顺手把流程记下来,也把热部署本身的原理和边界一起理清楚。
为什么会用到它
Java 开发里最消耗耐心的环节之一,是改一行代码就得重启整个服务。一个稍有规模的 Spring 应用,启动要走完类扫描、Bean 实例化、上下文刷新、连接池初始化几道工序,项目越大越慢。改文案、调一个 if 分支、修一个空指针,都要为此付出一次完整的启动时间。
JRebel 做的事情就是把这段等待砍掉:改完类文件直接生效,进程不重启,内存里的会话、缓存、连接都还在。
热部署的边界在哪
JVM 本身是带热替换能力的。调试器通过 JPDA 调用 JVMTI 的 RedefineClasses,可以把一个已加载类的字节码换掉——但只能换方法体。
一旦触及类的结构,就会失败:
- 新增或删除方法
- 新增或删除字段
- 修改继承关系、实现的接口
- 修改注解、修改方法签名
这类操作会直接报 schema change not implemented,只能重启。
JRebel 的做法不是走标准 HotSwap,而是在类加载阶段介入,对字节码做改写,并维护自己的一套版本映射,所以结构性变更也能生效。它还针对 Spring、Hibernate、MyBatis 这些框架做了适配——新增一个 @Service、改一段 XML 映射、加一个 Controller 方法,框架侧的元数据也会跟着刷新。这部分适配工作量不小,也是它收费的原因。
激活步骤
点击激活页面

选择在线服务器授权激活。
输入服务器授权URL地址
URL地址为:https://jrebel.qekang.com/{GUID}
其中的GUID需要生成(生成地址):
进入网站后生成GUID之后填写入URL地址中。
勾选同意协议,点击激活。

至此JRebel破解成功。
这里的 URL 是「服务器地址 + 一个 GUID」拼出来的完整串,不是只填域名。GUID 相当于一个客户端标识,自己生成一个新的即可。后面的邮箱可以随便填,授权服务器不做校验。
踩坑与注意
1)激活成功不等于生效。JRebel 需要以自己的 Run / Debug 按钮启动应用,走普通的 Run 不会挂载 agent,代码改了依然要重启。
2)rebel.xml 决定了它去哪里找 class。JRebel 靠这个文件把运行时的类路径映射回项目的编译输出目录。Maven 项目用 jrebel-maven-plugin 生成:
<!-- 在 pom.xml 的 build/plugins 中加入,执行 mvn jrebel:generate 生成 rebel.xml -->
<plugin>
<groupId>org.zeroturnaround</groupId>
<artifactId>jrebel-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-rebel-xml</id>
<phase>process-resources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
IDEA 插件通常会自动处理这一步,多模块项目要确认每个模块都生成了。
3)依赖外网。这种在线授权方式每次启动都要连授权服务器,内网开发机、离线环境会直接卡在校验上。
4)升级容易失效。IDEA 大版本更新后插件可能不兼容,授权服务器本身也随时可能关停。
用第三方授权服务器本质上是绕过 JRebel 的商业授权。个人折腾无妨,商业项目里这么做是有法律风险的,团队环境建议走正规 license。
更省事的替代方案
如果只是想少重启几次,不一定非要 JRebel:
- DCEVM + HotSwapAgent:开源方案。DCEVM 是修改过的 JVM,把 HotSwap 的限制放宽到支持增删方法和字段;HotSwapAgent 在此之上补齐框架适配。能力接近 JRebel,代价是要换 JVM。
- Spring Boot DevTools:用两个 ClassLoader 分离第三方依赖和业务代码,改动后只重启业务那一层。不是真热部署,但重启速度比冷启动快一大截,零成本零风险。
- IDEA 原生 HotSwap:Debug 模式下重新编译单个类即可生效。只能改方法体,但应付日常调参、改日志足够了。
- JRebel 官方也提供免费试用,评估阶段直接用官方的更省心。
小结
热部署工具解决的是「反馈循环太长」这一个问题。理解 JVM 只允许替换方法体这条硬边界,就能明白 JRebel 贵在哪、DevTools 为什么只能算折中。选哪个,看项目规模和能接受的代价。
评论 / COMMENTS