IntelliJ IDEA 14 利用JRebel实现热部署
特别鸣谢: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,然后上面显示激活的的天数。

IntelliJ IDEA 14 利用JRebel实现热部署的更多相关文章
- IntelliJ IDEA 14 利用JRebel实现热部署 二
前言:今天下午和一个qq群里讨论JRebel时,忽然得到“自动部署”的奥秘--真有听君一席话,胜读十年书的感悟. 这是此群友的热部署博客:http://blog.csdn.net/martinkey/ ...
- IDEA配置JRebel实现热部署
IDEA配置JRebel实现热部署 1.下载JRebel and XRebel for Intellij插件 2. 激活 请查看这个文章http://www.cicoding.cn/other/jre ...
- jrebel配置热部署参数
jrebel配置热部署参数: -noverify -agentpath:D:/jrebel/lib/jrebel64.dll -Drebel.dirs=E:/workspace/item/src/ma ...
- MyEclipse10 使用JRebel实现热部署
MyEclipse10 使用JRebel实现热部署 Window --Preferences-Tomcat 6.x-JDK-JVM -noverify -javaagent:D:\JRebel\jre ...
- 热部署简介及在eclipse安装插件JRebel进行热部署
一.热部署简介 1.热部署与热加载在应用运行的时候升级软件,无需重新启动的方式有两种,热部署和热加载.它们之间的区别是:(1).部署方式: 热部署在服务器运行时重新部署项目.热加载在运行时重新加载cl ...
- IntelliJ IDEA 2017.1.5迁移eclipse,SSM项目,通过jrebel实现热部署
1.首先打开idea,配置SVN版本控制器的路径 2.配置maven 3.配置jrebel热部署的路径 4.从svn到出项目 5.配置配置tomacat参数-server -XX:PermSize=1 ...
- IntelliJ IDEA jrebel 实现热部署
前提是能够访问登陆Facebook,有Facebook的账号(我注册了一个) 点击:https://my.jrebel.com 用Facebook登陆 之后按要求填写信息 然后获取激活码 打开 id ...
- IntelliJ13+tomcat+jrebel实现热部署(亲测可用)
网上有很多介绍intellij idea整合jrebel插件实现热部署的文章,但是有的比较复杂,有的不能成功,最后经过各种尝试,实现了整合,亲测可用!步骤说明如下: 一.先下载jrebel安 ...
- JRebel idea 热部署
下载链接:https://pan.baidu.com/s/1CUvEarKVARJF46LJ2W90Lg 提取码:s46w 下载完以后是个ZIP(jr-ide-intellij-7.1.5_13-17 ...
随机推荐
- 通过UNIX域套接字传递描述符和 sendmsg/recvmsg 函数
在前面我们介绍了UNIX域套接字编程,更重要的一点是UNIX域套接字可以在同一台主机上各进程之间传递文件描述符. 下面先来看两个函数: #include <sys/types.h> #i ...
- Linux进程冻结技术
1 什么是进程冻结 进程冻结技术(freezing of tasks)是指在系统hibernate或者suspend的时候,将用户进程和部分内核线程置于“可控”的暂停状态. 2 为什么需要冻结技术 假 ...
- unity 获得父子节点
与常识不同,unity中获得父子节点需要通过transform.即先获得父/子节点的transform,然后再通过父/子节点的transform获得父/子节点. 获得父节点gameObject: Ga ...
- JS正则表达式获取分组内容实例
JS正则表达式获取分组内容. 支持多次匹配的方式: var testStr = "now test001 test002"; var re = /test(\d+)/ig; var ...
- [na]双绞线线序+POE供电网线
0 重点-8根线的细节 传输数据线: 一般情况下会用1236(橙白.橙.绿白.绿)传输数据,1.2用于发送,3.6用于接收, 供电线: 45(蓝.蓝白)电源正极 78(棕白.棕)电源负极. 一 网线线 ...
- Java experts blog
https://blogs.oracle.com/poonam/ https://blogs.oracle.com/poonam/entry/updates_to_the_java_troublesh ...
- 关于MySQL字符集问题:Specified key was too long; max key length is 767 bytes
[文章来源]http://blog.csdn.net/cindy9902/article/details/6215769 MySQL: ERROR 1071 (42000): Specified ke ...
- electron 的窗口设置最大化 最小化
/** * Created by Administrator on 2016/11/23. * 页面对窗口的一些操作封装,用于渲染进程 */ "use strict"; const ...
- 命令运行带参数的jar
一.打包(此处用的是eclipse) 代码如下,此如引用了某博主的代码,因忘记地址,如博主发现此文,可私信我 package com.example.Open; import java.io.File ...
- arm B和BL指令浅析
arm B和BL指令浅析 B或BL指令引起处理器转移到“子程序名”处开始执行.两者的不同之处在于:(1)BL指令在转移到子程序执行之前,将其下一条指令的地址拷贝到R14(LR,链接寄存器). ...