特別鳴謝:http://wlb.wlb.blog.163.com/blog/static/467413201522095132658/
©IntelliJ IDEA開源社①群 185441009
http://truemylife.iteye.com/blog/1140921
----------------------------------------------------------------------------------------------------------------
說明:IntelliJ IDEA的版本:ideaIU-14.1.5
JRebel版本:jr-ide-idea-6.0.2
前言:
1.在Java的開發過程中,每次寫完代碼,都要“編譯->發布->啟動->查看啟動結果->刷新瀏覽器”,會耗費一定的時間,而且影響心情,而運用JRebel的熱部署可解決此問題。使用IntelliJ IDEA+JRebel熱部署,不僅在修改java代碼上十分方便,且在修改js代碼、HTML代碼上更是可以算上即時刷新。2.本博客第一次采用“特別鳴謝”中的方法在配置JRebel的過程中可能是因為破解JRebel失敗而沒有成功,第二次采用©IntelliJ IDEA開源社①群中的破解方法配置成功,所以建議讀者直接按本博客方法進行配置,不用下載破解版。(當然你也可以按照鳴謝網址中的方法進行嘗試。)
步驟:
一、下載JRebel插件
地址:http://download.csdn.net/detail/ablipan/8397321
說明:下載后為zip文件,不用解壓,待會兒安裝直接可以用zip格式安裝。
二、安裝JRebel插件
(這個過程的第1步是照搬“特別鳴謝”中網址的方法進行的,第2步是©IntelliJ IDEA開源社①群中的方法。)
1.File->Settings->Plugins->Install plugin from disk...->Apply->Restart,這樣Jrebel插件就裝好了。如下圖所示:
2.激活Jrebel。重啟IntelliJ IDEA后,按照以下的圖示方法:(注:下面的圖或許不夠清晰..尤其是對第一次裝這個的童鞋--可以直接看本文最后的“附3:清晰版2.2”)
說明:上圖中右邊的框中的信息寫在這里,以免看不清:
http://idea.lanyus.com/ilanyu
langyu199950316@gmail.com
出現了上圖中的Offline Mode is:ACTIVE(36499 days and 23 hours left) 信息表明已經激活成功了。此外,配置成功后會在IntelliJ IDEA出現以下提示:
三、測試
1.java代碼修改測試。修改發布項目的Tomcat的配置,具體修改處見以下圖示。
2.通過JRebel啟動Tomcat
這是運行后的界面:
3.修改java代碼:
原java代碼:
修改后的代碼:
可以看到在修改java代碼后,只要點擊項目發布的瀏覽器,JRebel會自動地進行編譯。IntelliJ IDEA的底部會顯示JRebel自動編譯java的信息:
當然,你也可以點擊下面的Deploy All按鈕進行手工編譯。
點擊“提交”后運行結果:
4.js代碼測試
原js代碼:
修改后:
刷新頁面:
后記:通過熱部署,可以明顯地體會到修改代碼后開發人員什么都不用做JRebel就可以自動地對項目進行快捷地編譯、部署工作。
熱部署的應用
重要說明:在上文的“測試中”及下文中的“補”中,我大談特談熱部署的應用,實際上基本都是錯的,沒什么參考價值。那么怎樣在修改文件后進行編譯呢?如何知道是否熱部署是否成功呢?今天像一位熱心的網友請教才知道特簡單!看下面:
如我們修改任意一個java類,右鍵:
點擊Compile 'UserController.java'即可編輯所在java類。
或者:點擊下面紅框中的圖標即可
在Event log 可看到編譯日志。
我們點擊頁面,控制台出現下面信息,說明熱部署成功:
我這里怎么重載了2次?--暫時不管了。
2016/2/14
又不行了。還是按補1中的方式去做咯。。。
待續。。。
補:
補1:
1.火狐偶爾好像不靈,但是歐朋和谷歌是100%支持熱部署的。
2.如果新建的項目JRebel沒發揮作用,這八成是項目中缺少rebel.xml的原因,用idea的命令把rebel.xml弄出來就可以,點擊項目右鍵,然后如以下圖示:
點擊rebel.xml,在maven項目中的resource文件夾中就會生成rebel.xml了。
此外,打開rebel.xml,會顯示:
3.雖然開發者運用熱部署在修改代碼后什么都不用干,只需點擊項目所在的瀏覽器就可觸發熱部署,熱部署雖然快捷,但也需要時間(即使一個簡單的測試項目也要2~3秒),所以在修改代碼后立即點擊項目發布的瀏覽器並不知道部署完了沒有,還要回到idea上去看,這樣不太方便。在上面的博文中介紹了可以點擊idea下面的Deploy All 按鈕,部署完畢在到發布的頁面,但經測試點另外一個命令會更快一些(特別是較大項目時):
下面進行對比測試:
1.點擊 Deploy All 命令,下面是控制台的打印信息
2.點擊Update 'Unnamed' application (Unnamed就是Tomcat,因為沒有命名,是默認名)
彈出對話框,選擇Update classes and resources
以下是控制台信息
當點擊項目的發布瀏覽器,並點擊相應的請求,出現以下信息(注意:用點擊 Deploy All 命令並不會出現下面紅框框中的信息)。
小結:通過以上測試可看出執行2種命令的區別:1.執行Deploy All命令,是部署服務器所有應該部署的內容;而執行Update 'Unnamed' application的Update classes and resources只是更新項目的classes、resources文件。2.二者的執行順序不同。執行Deploy All命令是一下子全部部署完,而后者是先進行編譯,當用戶提交頁面請求時,JRebel執行了更新classes、resources文件的命令。綜合考慮,在修改代碼后,優先使用Update 'Unnamed' application的Update classes and resources命令。
補2:
通過測試,發現熱部署主要是針對於服務器的,因此建議通過啟動服務器訪問頁面(在web.xml設置默認主頁),如果是在頁面上啟動,現在可以肯定的是點擊服務器發布的頁面不會觸發熱部署(前台代碼--js/html可以,后台java代碼不可以),而通過idea底部的JRebel Executor命令欄中的Update 'xxxx' application偶爾無效。如下圖說明:
1.通過啟動服務器訪問頁面
2.在頁面上啟動服務器
點擊1--Update 'index2.jsp' application,若彈出的提示框有像下面這樣,表示可進行熱部署,但偶爾不會出現“Update classes and resources”。
補3:如果修改的是web.xml,則選擇Redeploy(重新部署)
附1:熱部署成功的標志
附2::Jrebel官方對熱布署支持的場景列表(查看官網說明http://www.zeroturnaround.com/jrebel/features/)
Java EE Support |
Jrebel |
JVM Hot Swap |
Time to reload |
< 1s |
< 1s |
No memory leak |
YES |
YES |
Changes to method bodies |
YES |
YES |
Adding/removing Methods |
YES |
NO |
Adding/removing constructors |
YES |
NO |
Adding/removing fields |
YES |
NO |
Adding/removing classes |
YES |
NO |
Adding/removing annotations |
YES |
NO |
Changing static field value |
YES JRebel 3.0+ |
NO |
Adding/removing enum values |
YES JRebel 3.0+ |
NO |
Changing interfaces |
YES |
NO |
Replacing superclass |
NO |
NO |
Adding/removing implemented interfaces |
NO |
NO |
Skip builds for WAR directories |
YES |
YES |
Skip builds for .WAR/.EAR class updates |
YES |
YES |
Skip builds for .WAR/.EAR resource updates |
YES |
NO |
Map multiple source dirs to one .WAR/.EAR target dir |
YES |
NO |
Map classes and resources with include/exclude patterns |
YES |
NO |
Map multiple source dirs with Ant-style patterns |
YES |
NO |
Use system properties to make mapping machine-independent |
YES |
NO |
Maven plugin |
YES |
NO |
JSP EL changes |
YES |
NO |
JSP Scriptlet changes |
YES Enterprise Add-on |
NO |
EJB 1.x session bean interface changes |
YES Enterprise Add-on |
NO |
EJB 2.x session bean interface changes |
YES Enterprise Add-on |
NO |
EJB 3.x session bean interface changes |
YES JRebel 3.0+ |
NO |
JSF changes (Mojarra) |
YES JRebel 3.0+ |
NO |
JPA changes (Hibernate, EclipseLink, TopLink, OpenJPA) |
YES JRebel 3.0+ |
NO |
CDI changes (Weld) |
YES JRebel 3.0+ |
NO |
ResourceBundle |
YES |
NO |
Spring Framework 2.x or later |
YES |
NO |
Hibernate |
YES JRebel 3.0+ |
NO |
JBoss Seam 2.x or later |
YES JRebel 3.0+ |
NO |
Google Guice |
YES |
NO |
Stripes 1.x or later |
YES |
NO |
Apache log4j 1.2.x or later |
YES |
NO |
Apache Struts 1.x |
YES |
NO |
Apache Struts 2.x or later |
YES |
NO |
Apache Tapestry4 |
YES |
NO |
Apache Velocity |
YES |
NO |
Apache Wicket |
YES |
NO |
CgLib |
YES JRebel 3.0+ |
NO |
Javassist |
YES JRebel 3.0+ |
NO |
Atlassian Confluence plugins |
YES |
NO |
ClassWorlds |
YES Beta |
NO |
Apache Felix |
YES Beta |
NO |
Eclipse Equinox |
YES Beta |
NO |
IntelliJ IDEA 7.x, 8.x plugins |
YES Beta |
NO |
NetBeans plugins |
YES Beta |
NO |
Jrebel對第三方框架支持對應表
查看官網http://www.zeroturnaround.com/jrebel/features/frameworks/
附3:清晰版2.2(所謂2.2是指本文安裝JRebel插件的第二步)
這是我在新電腦上裝IDEA的熱部署,所以把原文中“安裝JRebel插件的第二步”分化幾個小步驟,說更清楚點。
1.打開設置Settings-->Other Settings-->Offine Mode,點擊Configure
2.填寫以下信息,點Activate JRebel
3.激活成功
4.重啟IDEA,打開這里,這里要說明一下--因為沒來得及截圖,實際上當你看到下面的這個畫面之前還要做件事--即下面的紫色框框下面的現在是:Deactivate,可是本來記得是Activate,你點一下,才變成Deactivate,然后上面顯示激活的的天數。