我这里整理的 IDEA 热部署方式有两种,一是 IDEA 自带的,另一种是通过 JRebel 插件。其他方式如:使用 springloaded jar 包、 spring-boot-devtools 本文不做介绍
一、IDEA 自带的
修改服务配置,使得 IDEA 窗口失去焦点时,更新类和资源,具体步骤:
菜单Run -> EditConfiguration , 然后配置指定服务器下,server标签下on frame deactivation = Update classes and resource。 如下图tomcat server
缺点:这种方式是基于 JVM 提供的热加载,仅支持方法块内代码修改,只有 debug 模式下,并且是在 idea 失去焦点时(也即电脑切换到其他界面)才会触发热加载,相对加载速度缓慢 。
二、使用 JRebel 插件
1、安装 JRebel 插件
在 IDEA 中一次点击 File->Settings->Plugins->Brows Repositories ;在搜索框中输入 JRebel 进行搜索 ,找到 JRebel for intellij ;install;安装好之后需要重启 IDEA 。如下图所示
如果安装失败,提示 …was not installed: Cannot download …,则进行下面设置:
找到 settings-> Appearance&Behavior -> System settings->updates 下面的 Use secure Connetion 去掉√
2、激活 JRebel
JRebel 并非免费的插件,需要激活之后才能使用。
(1)首先到 github 上去下载一个破解软件,根据自己电脑下载指定版本,这里下载 windows x64 版本。 下载地址
(2)双击运行下载好的软件,如下图,运行成功
(3)在 IDEA 中一次点击 File->Settings->JRebel 并找到激活界面( 因为我的已经激活了,点击 change liense 进入激活界面)
(4)选择 JRebel activated 中的 Team URL
第一行输入 http://127.0.0.1:8888/d3545f42-7b88-4a77-a2da-5242c46d4bc2
第二行输入正确的邮箱格式(随意填写),例如: test@123.com
勾选 I agree with… ,点击按钮验证激活
提示:d3545f42-7b88-4a77-a2da-5242c46d4bc2为 UUID,可以自己生成,但是必须是 UUID
(4)最后把 JRebel 设置为 offline 模式 点一下work offline
说明:激活成功后就可以把激活软件关闭了。
3、配置 IDEA
JRbel 是基于类加载机制来实现热加载的,因此你修改完成代码后必须重新编译当前代码,才能触发热部署,Eclipse 默认就支持了自动编译,而在 Intellij IDEA 中默认是关闭了自动编译的,可以按照如下 2 步设置开启:
(1)IDEA 开启项目自动编译,File->Settings->Build,Execut, Deployment -> Compiler 勾选中左侧的Build Project automatically
(2)IDEA 开启项目运行时自动 make, ctrl + shift + a搜索命令:registry -> 勾选compiler.automake.allow.when.app.running
4、配置 JRebel
选择要启用 JRebel 热部署的 module,打开 View – Tool Windows – JRebel
弹出 JRebel Panel,根据需要选择 module
5、JRebel 热部署说明
(1)启动项目要采用 Run with JRebel、Debug with JRebel。
(2)JRebel 热部署触发
1)JRebel 默认修改完代码,到了检测时间自动重新编译完成热部署。检测时间可以通过下面设置
2)如果不想自动完成,可以通过取消 Enable IntelliJ automatic compilation 勾选√,如下图
这样在修改代码后,需要通过 Ctrl + F9 (或菜单 Built->Build Project),才会触发。
三、JRebel 使用中遇到的问题
1、不能热加载
问题:在使用中发现,代码明明更改了,包括增加了新的代码文件。但是无论手动触发、自动触发还是重启 tomcat。项目都不更新热加载。
分析:后来在一次启动 tomcat 的时候突然发现,启动日志中显示的 JRebel 热加载监控路径不是当前项目的路径;
接着想到,我这个项目是通过原来项目复制出来的,而该路径是原来项目的本地路径。于是明白之所有热部署不生效是因为 JRebel 监控是原来项目而不是当前项目。
解决:搞清楚了原因,接下来,只需将 JRebel 所监控项目改为当前项目即可。
File -> Project Structure… -> Modules -> JRebel -> Regenerate xml confguration 即可,如下图:
JRebel 方式重启 tomcat 即可。