來源 | OSCHINA 社區
作者 | 抽刀斷水-鷹影
原文鏈接:https://my.oschina.NET/u/3276866/blog/10091251
背景
在 JAVA 開發中我們經常會遇到這樣的場景,代碼需要在服務器上(測試或者沙箱)運行,但是每次修改代碼我們都需要經歷打包 -> 部署 -> 啟動等一些列的流程,這一套流程下來短則幾分鐘,長則幾十分鐘都有可能,漫長的打包流程浪費了我們大量的青春,市面上有很多 java 熱部署的插件,要么是只能修改方法體而不能新增字段和方法,要么就是只能在本地熱部署,本人也是在工作中部署浪費了無數的青春,于是我痛定思痛,決定寫一款遠程熱部署插件來提高效率,現將該插件 HotSeconds 分享給大家 (本插件分為 HotSecondsClient 和 HotSecondsServer),希望能給大家帶來幫助。
使用場景
- IDEA 本地修改代碼直接一鍵化熱部署到遠程服務器,只需要幾秒鐘。
- 支持修改代碼塊,新增字段,新增方法,新增類。
- 支持一些開源框架比如 Spring, SpringMVC 和 MyBatis。比如新增一個 @Autorwired 字段或者新增 MyBatis 的接口或者修改.xml 也是可以支持熱部署的。
- 最重要的一點,能支持自由擴展,比如公司內部的框架,或者一些新出的第三方框架,需要在熱部署文件后執行一些刷新緩存或者上下文的操作,也能自定義。
有了上述特點,部署效率至少可以提升 100 倍,不過光是熱部署改 bug 還遠遠不是本插件的目標,那只是牛刀小試,我的目標是在線開發,遠程服務器就是你的執行端,而本地,僅僅是一個寫代碼端。
使用演示
安裝完插件后,Debug 旁邊有一個按鈕,打開或者關閉連接遠程
高版本的 IDEA 可以點 Run->HotSeconds Start/Stop 打開和關閉。
首次打開會彈出配置選項,可以配置本地哪些目錄下的文件上傳到遠程。
熱部署演示
原來代碼長這樣
@Controller
@RequestMApping("/view")
publicclassHelloViewController{
@RequestMapping("/test")
@ResponseBody
publicString test {
return"hello,test";
}
}
我們修改代碼為
@Controller
@RequestMapping("/view")
publicclassHelloViewController{
@RequestMapping("/test")
@ResponseBody
publicString test {
return"hello,"+name;
}
privateString name{
return"Tom";
}
}
右鍵,選中 Hot swap this file to remote
然后就能把代碼熱部署到遠程,刷新瀏覽器頁面,代碼就生效了。
我們接著新增一個注入的字段和 controller
右鍵熱部署一下,刷新網頁可以看到結果
我們對 UserMapperXml.xml 修改一下 Mybatis 代碼
執行右鍵熱部署刷新網頁就能看到結果
遠程編譯并熱部署
右鍵菜單下有遠程編譯并熱部署的功能,主要是解決本地和遠程 jdk 版本不一致的問題,已兼容 jre 啟動問題和 lombok。
熱部署 jar 包和 jar 包內的.class
打開一個 jar 包的.class,右鍵,可以看到兩個選項,可以將當前的.class 熱部署到遠程,也可以將整個 jar 包熱部署到遠程。
自動熱部署
在 Run->HotSeconds Settings->Settings 中可以設置自動熱部署,只要本地文件修改了就會自動熱部署到遠程。
改完記得保存一下 (ctrl+s/command+s),不然會有延遲
遠程執行方法
附帶了一個非常強大的功能,遠程執行靜態無參方法
這樣可以不用寫接口就可以直接執行遠程的函數,可以在這個函數里面調用一些有參數或者非靜態的方法,中間需要比如 Spring 容器上下文自己去維護即可,非常方便。
安裝文檔
本插件分為 HotSecondsClient 和 HotSecondsServer,請點擊下面文檔查看詳細的安裝教程。
安裝文檔鏈接:https://Github.com/thanple/HotSecondsIDEA/blob/master/install/%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.md