jrebel需同时满足rebel.xml生成和-javaagent参数才生效,禁用devtools、配置资源监听、多模块独立设置是关键。

IntelliJ IDEA 里装 JRebel 插件后没反应?检查 rebel.xml 生成和 JVM 参数
JRebel 不是装上插件就自动生效的,它依赖两个关键动作:IDE 自动生成 rebel.xml 文件,以及启动时带上 -javaagent 参数指向 JRebel agent。常见错误是只装插件、没开自动生成,或 Tomcat 启动脚本里漏了 JVM 参数。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 在 IntelliJ 的
Settings → Build → Compiler → Resource patterns中确认**/*.xml没被排除(否则rebel.xml可能不复制到 output 目录) - 项目右键 →
Open Module Settings → Facets → JRebel,勾选Generate rebel.xml,并确保输出路径指向classes或WEB-INF/classes - 本地运行 Spring Boot 时,在
Run Configuration → VM options加:-noverify -javaagent:/path/to/jrebel/jrebel.jar;如果是外部 Tomcat,改catalina.sh/.bat的JAVA_OPTS - 验证是否生效:启动后看控制台第一行有没有
JRebel: Monitoring started;修改一个@RestController方法,刷新页面看日志里是否出现Reloading class 'xxx'
Spring Boot 2.6+ 使用 JRebel 热替换失败?注意 spring.devtools.restart 冲突
JRebel 和 Spring Boot DevTools 都做类重载,但机制不同,同时启用会互相干扰——DevTools 会清空类加载器,导致 JRebel 的增量更新失效,表现为修改后无反应或报 ClassNotFoundException。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 彻底禁用 DevTools:删掉
pom.xml里的spring-boot-devtools依赖,或设spring.devtools.restart.enabled=false - 不要只靠
@RefreshScope:它只对 Spring Bean 生效,对普通工具类、静态方法、配置类无效;JRebel 才是真正“改哪 reload 哪”的方案 - 若用 Lombok,确保
lombok.config里有lombok.addLombokGeneratedAnnotation = true,否则 JRebel 可能跳过生成的 getter/setter
修改 application.yml 不生效?JRebel 默认不监听配置文件热更
application.yml 属于资源文件,JRebel 默认只监控 class 文件变更。改完配置不重启就生效,得手动加规则,否则 Spring 仍读的是老缓存值。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 在项目根目录新建
rebel.xml(如果插件没自动生成),并在<classpath></classpath>下加:<fileset dir="${project.dir}/src/main/resources"> <include name="application*.yml"/> <include name="application*.yaml"/> <include name="application*.properties"/> </fileset> - Spring Boot 2.4+ 使用
ConfigDataLocationResolver后,还需在application.yml里显式声明:spring.config.import: optional:configserver:类配置才可能被 JRebel 拦截,否则直接走默认加载链路 - 验证方式:改完
server.port,看日志是否打出Server running on port xxx新端口,而不是报端口冲突
Maven 多模块项目中部分模块热部署失效?检查 rebel.xml 路径和依赖传递
父模块启用 JRebel 后,子模块若没单独配置,rebel.xml 可能生成在错误位置(比如生成到父模块 output 下),导致子模块 class 改了但 JRebel 找不到对应映射。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 每个子模块都要单独打开
Facets → JRebel并勾选Generate rebel.xml,不能只配父模块 - 确认子模块的
Output path和Test output path在 IDE 设置里是独立的(不是共用父模块路径),否则编译输出混在一起,rebel.xml里的classpath路径会错 - 如果子模块是
jar包被其他模块依赖,需在该模块的pom.xml中加:<plugin> <groupId>org.zeroturnaround</groupId> <artifactId>jrebel-maven-plugin</artifactId> <version>1.1.10</version> <executions> <execution> <id>generate-rebel-xml</id> <goals><goal>generate</goal></goals> </execution> </executions> </plugin>否则 Maven 编译时不会生成rebel.xml










