@(工作笔记)
JRebel-record
[TOC]
tomcat7插件结合jrebel进行热部署的一些探索
在有一篇文章里面谈到过IDEA集成热部署的一些内容,具体可以查看那篇blog:IDEA集成tomcat7插件。 本篇重点讲解jrebel方面的热部署的内容。
使用 IntelliJ IDEA 插件方式安装JRebel
第一步:本地安装
点击settings,然后照着如图所示的步骤进行安装,安装成功后:
但是此时是没有激活的,使用时候会弹出如下错误:
第二步:注册破解
具体破解过程,可以在中具体查看申请得到激活码:申请获取激活码过程
激活后:
第三步:使用IDEA进行使用
可以和本地tomcat进行结合使用,但是这个不在我的这篇文章讲解中。
首先,关于热部署引入一下这个概念:
所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。对于Java应用程序来说,热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部
署的过程中,类装入器扮演着重要的角色。大多数基于Java的应用服务器,包括EJB服务器和Servlet容器,都支持热部署。类装入器不能重新装入一个已经装入的类,但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。
\ **
\为什么要使用jrebel?**
回答这个问题前,先看下一下场景:
场景一:
在javaee项目中,你正启动了项目,但是你修改了某个方法中的一个代码片段,此时保存还还用吗?
场景二:
在javaee项目中,你正启动了项目,但是你在某个实类里面添加了新的方法,或者添加的新的类,此时保存后了?
场景一和场景二唯一的不同就是:一个是在已有的架子下重新构建,另一个是添加新的class进行重新构建?
\接下来说说下本地tomcat和jrebel的实际情况:**
本地tomcat余jrebel结合进行运行的时候,会自动重新新的class构建到tomcat服务器中,无论是重新添加的方法或者是类,还是修改某个已有的方法片段。
\为什么要用tomcat7插件和jrebel结合了?**
使用tomcat7插件运行后,只能修改某个方法中的代码片段,不支持创建新的实例或者方法。
maven tomcat7插件和jrebel就能很好的解决这个问题:
集成jrebel中,使用如下方式启动:
。。。mvn能右键,才知道,醉了
2017-05-22 18:10:40 JRebel: Contacting myJRebel server ..
2017-05-22 18:10:42 JRebel: Starting logging to file: C:\Users\Administrator\.jrebel\jrebel.log
2017-05-22 18:10:42 JRebel:
2017-05-22 18:10:42 JRebel: #############################################################
2017-05-22 18:10:42 JRebel:
2017-05-22 18:10:42 JRebel: JRebel Agent 7.0.8 (201704281043)
2017-05-22 18:10:42 JRebel: (c) Copyright ZeroTurnaround AS, Estonia, Tartu.
2017-05-22 18:10:42 JRebel:
2017-05-22 18:10:42 JRebel: Over the last 2 days JRebel prevented
2017-05-22 18:10:42 JRebel: at least 14 redeploys/restarts saving you about 0.6 hours.
2017-05-22 18:10:42 JRebel:
2017-05-22 18:10:42 JRebel: Licensed to hue jonh (using myJRebel).
2017-05-22 18:10:42 JRebel:
2017-05-22 18:10:42 JRebel:
2017-05-22 18:10:42 JRebel: #############################################################
2017-05-22 18:10:42 JRebel:
每次修改代码后:在重新compile下就可以了!
JRebel插件使用详解
简介
JRebel是一套JavaEE开发工具。 Jrebel 可快速实现热部署,节省了大量重启时间,提高了个人开发效率。 JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。JRebel使你能即时分别看到代码、类和资源的变化,你可以一个个地上传而不是一次性全部部署。当程序员在开发环境中对任何一个类或者资源作出修改的时候,这个变化会直接反应在部署好的应用程序上,从而跳过了构建和部署的过程,可以省去大量的部署用的时间。
JRebel是一款JVM插件,它使得Java代码修改后不用重启系统,立即生效。 IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,才能生效,浪费时间浪费生命。 目前对于idea热部署最好的解决方案就是安装JRebel插件。
安装
第一步:安装插件
第二步:在线GUID地址:在线生成GUID
网址:在线GUID地址 如果失效刷新GUID替换就可以!
服务器地址:https://jrebel.qekang.com/{GUID}
第三步:打开jrebel 如下所示面板,选择Connect to online licensing service
安装成功之后就可以通过JRebel启动项目。这样修改完Java代码后,就可以通过快捷键 Ctrl+shift+F9 而不再需要重启站点这样繁琐浪费时间的操作了。
相关设置
设置成离线工作模式
设置自动编译
要想实现热部署,首先需要对Intellij按如下进行设置:
- 由于JRebel是实时监控class文件的变化来实现热部署的,所以在idea环境下需要打开自动变异功能才能实现随时修改,随时生效。
- 打开运行时编译
设置compiler.automake.allow.when.app.running
快捷键ctrl+shift+A,搜索:registry 或者 按快捷键 Ctrl+Shift+Alt+/ ,选择 Registry
使用
运行项目时要点击图中红框中的按钮,即可运行: 第一个按钮是Run,第二个按钮是Debug。
修改代码(只测试了Java代码的修改)后,按快捷键 Ctrl + Shift + F9,运行后会提示有变化是否重新加载,选yes。完成加载以后,就已经实现了热更新效果。
JRebel热部署迅速上手
JRebel Maven插件的目的是在Maven构建期间为您的项目生成rebel.xml
文件。
会在target目录下生成。。。没说明白,一顿好找
对于Maven项目 特别是在多模块项目的情况下 使用JRebel Maven插件生成rebel.xml配置文件很方便。将以下代码段添加到您的父级pom.xml
。该rebel.xml配置文件可以在你的Maven项目的每个单独的子模块产生。
<plugin>
<groupId>org.zeroturnaround</groupId>
<artifactId>jrebel-maven-plugin</artifactId>
<version>1.1.8</version>
<configuration>
<!-- 将配置的资源目录也添加到rebel.xml中 -->
<addResourcesDirToRebelXml>true</addResourcesDirToRebelXml>
<!--如果设置为true,则生成的rebel.xml将在构建期间在控制台中打印出来,可以立即看到生成的内容。默认为false-->
<showGenerated>true</showGenerated>
<!-- 每次都生成新的rebel.xml。如果为false,只在rebel.xml和pom.xml的时间戳不相同的时候,重新生成rebel.xml。默认为false -->
<!--<alwaysGenerate>true</alwaysGenerate>-->
<!-- 在单个项目中处理多个模块时,您可以选择跳过为特定模块生成rebel.xml。 只需将以下内容添加到他们的pom.xml中即可 -->
<!--<skip>true</skip>-->
<!-- 如果工程师自己自定义的package,则需要主动设置为 jar 或者 war -->
<!--<packaging>war</packaging>-->
</configuration>
<executions>
<execution>
<id>generate-rebel-xml</id>
<phase>process-resources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
配置结束后执行命令mvn jrebel:generate
3. 启动
启动时使用 JRebel 按钮来Run和Debug,会自动在 resources 文件夹中生成rebel.xml
文件,文件中配置了Jrebel热加载的时候需要追踪的文件路径及web配置。比如自己需要主动加入 shop-model 模块
的路径
<?xml version="1.0" encoding="UTF-8"?>
<!--
This is the JRebel configuration file. It maps the running application to your IDE workspace, enabling JRebel reloading for this project.
Refer to https://manuals.zeroturnaround.com/jrebel/standalone/config.html for more information.
-->
<application generated-by="intellij" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://update.zeroturnaround.com/jrebel/rebel-2_1.xsd">
<classpath>
<dir name="C:/workspace/song/shop/shop-web/target/classes">
</dir>
<dir name="C:/workspace/song/shop/shop-model/target/classes">
</dir>
</classpath>
<web>
<link target="/">
<dir name="C:/workspace/song/shop/shop-web/src/main/webapp">
</dir>
</link>
</web>
</application>
4. 最后的配置
如果不做下面的配置,则需要手动编译才会触发热部署(spring boot devtools一样的问题):
- 到设置里将
project automatically
勾选上:File -> Settings -> Build,… -> Compiler ,勾选 Build project automatically - Intellij IEDA 使用
ctrl + shift + alt + /
快捷键选择Registry...
,勾选compiler.automake.allow.when.app.running
5. 推荐用法
一般修改java文件后,会自动编译的。但是一般自己主动触发编译会更可控一些:
Ctrl + Shift + F9
编译当前文件 或者 右键-> Recompile ....java
https://blog.csdn.net/qq_39994079/article/details/100010056