我這里整理的 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 即可。