最近整理idea插件时,发现装了jrebel但没使用,花了点时间配置,在此记录。使用jrebel热重载确实比update要快一些,热部署也省去了打包上传服务器的时间,提高了开发效率。本文部署的是tomcat项目,不过springboot也差不多。
- 使用的idea版本:2020.3
- 使用的jrebel版本:2023.3.2
目录
1.安装jrebel
1.1安装
打开File->Settings->plugins,在Marketplace中搜索jrebel,点击install安装
1.2激活
安装完成后重启idea,在File->Settings中会新增一栏JRebel & XRebel
需要在此页面配置Team URL激活jrebel
第一行是我们需要生成的url,第二行是任意邮箱
第一行的url网上大部分教程都是使用某个网址+在线生成的GUID拼接,但我没有成功,所以我的方法是去github搜jrebel,把搭建好的项目下载下来运行一下,就得到了激活需要的url
激活后打开File->Settings->JRebel & XRebel,点击work offline设置为离线工作防止过期,如图为已激活状态。
1.3本地使用
激活后需要打开File->Settings->Build,Execution,Deployment->Complier,勾选自动构建项目,这样才能实现jrebel热重载。
打开侧边栏的jrebel工具会发现两个图标,左边是本地右边是远程,勾选后分别会在resources目录下生成对应文件,不需要改,这时候还没有配置远程服务器,所以只能勾选左边,勾选后点击上方工具栏的运行或调试启动项目。
启动后看到如图画面代表jrebel加载成功,现在在修改代码后通过快捷键Ctrl + Shift + F9就可以实现热重载。
2.热部署
2.1服务器安装jrebel
打开官网下载与idea插件相同版本的文件,上传至服务器目录
使用命令解压文件
# 解压下载文件
unzip jrebel-2023.3.2-nosetup.zip
2.2服务器激活jrebel
打开github下载激活工具,上传至服务器
执行如下命令启动激活工具
# port修改为任意端口号,我用的是8083
./ReverseProxy_linux_amd64 -l "127.0.0.1:port" &
接下来进入解压好的jrebel文件夹的bin目录下,使用如下命令激活jrebel
# 将url替换为本地激活时使用的url,修改一下端口号,修改为上一步激活工具启动时使用的端口,email替换为任意邮箱
bash activate.sh url email
激活后回到jrebel目录,目录下有一个名为jrebel.jar的文件,使用如下命令设置一下密码
# 将xxxxxx替换为密码
java -jar jrebel.jar -set-remote-password xxxxxx
激活完成后就用不到激活工具了,可以通过端口把他kill掉
2.3配置热部署
idea打开File->Settings->JRebel & XRebel->JRebel Remote Servers,勾选底下的Synchronize on build,然后点击+号添加服务器,这里url的端口不是上面激活所用的端口,是服务器tomcat启动项目的端口,填写完后可以点击测试按钮测试。
配置完成后进入服务器tomcat/bin目录,编辑catalina.sh文件,添加如下参数
# REBEL_HOME后的路径替换为你的jrebel路径
REBEL_HOME="/opt/jrebel"
JAVA_OPTS="\"-agentpath:$REBEL_HOME/lib/libjrebel64.so\" -Drebel.remoting_plugin=true $JAVA_OPTS"
保存后在bin目录下使用命令启动项目
./startup.sh
启动完成后在idea勾选远程调试,点击Debug启动本地项目,启动完成后点击右边云朵按钮进行热部署,弹出上传成功的提示代表热部署成功。
至此我们就可以进行远程热部署了,不过要注意热部署并非真正修改class文件,所以只对当前服务生效,如果服务器项目重启,改动就失效了。
3.远程Debug
如图打开配置
点击+号,找到remote jvm debug,新增。修改name和host后保存,然后复制host下方的参数
将这段参数粘贴到上文2.3步骤中提到的catalina.sh文件中,如图,然后重启服务器项目
idea选择刚刚配置的remote jvm debug,点击debug启动,控制台如图显示则配置成功。接下来就可以结合热部署打断点远程调试啦。
如果是非tomcat项目,区别是修改启动参数方式不同,例如springboot,可以如下图查询具体配置方法。