• IntelliJ IDEA 14 利用JRebel实现热部署


    特别鸣谢:http://wlb.wlb.blog.163.com/blog/static/467413201522095132658/

    ©IntelliJ IDEA开源社①群 185441009

    鸣谢:http://www.hankcs.com/program/java/intellij-idea-configuration-of-jrebel-automatic-hot-deployment.html

    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,然后上面显示激活的的天数。

  • 相关阅读:
    第60天Shader法线贴图、切线空间
    第59天Shader基本光照模型、漫反射光照算法、光照计算、高光、灰度图实现
    第58天shader混合命令、颜色运算、顶点/片元着色、属性类型、语义、坐标空间、Unity内置矩阵、纹理采样、Cg函数
    第57天shader基本结构、渲染队列、裁剪、深度写入
    第55天XLua实现背包
    第54天XLua插件使用(续)
    第53天XLua插件使用
    第52天-lua语言基础语法
    第51天-AssetBundle(AB包)
    第50天-背包实例(三)
  • 原文地址:https://www.cnblogs.com/wql025/p/5017823.html
Copyright © 2020-2023  润新知