热部署插件 JRebel: 是一个 JVM Java 代理,它与应用服务器集成,使得类可以用现有的类加载器重新加载。
只有修改过的类才会重新编译并立即在运行的应用程序中加载。
JRebel 单独使用
使用 rebel.xml 进行应用程序配置
JRebel 将您的项目工作区直接映射到正在运行的应用程序。然后,JRebel 监视您对类和资源所做的更改-并将其智能地反映在您的应用程序中。
为了做到这一点,JRebel 需要知道您的类和资源在哪里。为此,JRebel 使用 rebel.xml 配置文件。此 XML 文件将您部署的项目映射回工作空间。
将应用程序部署为 WAR 或 EAR 软件包时,这是强制性的。 每个模块需要一个 rebel.xml 配置文件。
使用 JRebel IDE 插件时,建议使用 IDE 插件生成 rebel.xml。我们为 Maven 和 Gradle 提供专用插件。使用专用的 Maven 和 Gradle 插件生成 rebel.xml 是针对使用 IDE 插件生成不可用的情况而设计的。
- 如果是 Web 模块,则 rebel.xml 配置文件应最终位于 WEB-INF/classes 目录中。
- 如果是 EJB 模块或 JAR 库,则应位于归档文件的根目录中。
可以将其放置在项目中的源文件夹或资源文件夹的根目录(.properties 文件所在的位置)中,并确保将其复制到目标目录。
JRebel 作为 IDE 插件使用
这里只讲 IntelliJ IDEA 中的 JRebel 插件
IntelliJ IDEA 的 JRebel 插件包括 JRebel 代理,可帮助您自动生成 JRebel 配置。 只需单击一下,即可为应用程序和服务器启用 JRebel,并改善了 IDE 中的调试支持。
项目配置
唯一需要的配置文件是 rebel.xml。 JRebel 使用它来将正在运行的应用程序映射到工作空间。 好消息是 IDE 插件可以为您自动执行此配置。
在项目视图中的项目节点上单击鼠标右键,然后选择 JRebel > rebel.xml,另外也可以在工具窗口中生成。
从这个上下文菜单中,您还可以打开模块设置。为此,右键单击所需的模块并选择 JRebel > Configure module。
- 默认情况下,IntelliJ IDEA 不会在保存时编译类。 按 Ctrl + Shift + F9 可以编译当前文件,模块或包(您也可以通过 Build > Make Project 找到此命令)。
- 生成 rebel.xml 后,需要将应用程序重新部署到服务器,以使配置生效。
如果要修改配置文件,请参阅 rebel.xml 文件格式的官方参考。
注意,在项目中使用 Maven 或 Gradle 时,可以考虑使用相应的插件来生成 rebel.xml(而不是 IDE 插件)。有关更多信息,请参阅 Maven 插件或 Gradle 插件。
另外我们可以设置 IDEA 项目自动编译
JRebel 工具窗口
JRebel 工具窗口提供了活动项目的 JRebel 配置概述。此工具窗口显示项目模块的列表。从这里可以为特定模块快速启用 JRebel 配置。
通过选中模块名称旁边的(图标带 JR 的第一个)复选框,您将生成 rebel.xml 配置文件,该文件将放置在项目的源码树中。对于 Maven 项目,它将被放入 src/main/resources
中,以便在构建期间自动获取它。
在 rebel.xml 中使用相对路径:
请参阅此处获取说明。 如果您要提交 rebel.xml 并与整个团队共享配置,可以使用相对路径。
服务启动
IntelliJ IDEA 的 JRebel 插件包括专用的启动按钮。 默认情况下,这些按钮位于主工具栏和导航工具栏上。 您也可以通过"Run"菜单找到这些命令。
第一个按钮使用 JRebel 启动容器。 第二个按钮在调试模式下使用 JRebel 启动容器。
通过从这些按钮之一启动后,JRebel 插件将自动添加适当的命令行参数
禁用应用程序自动部署
Disable automatic application deployment
通过 “Run > Edit Configurations.” 打开相应应用程序服务器的运行/调试配置。在 “Server” 标签页上中的 “Running Application Update Policies(更新策略)” 下的 On frame deactivation
设置为 Do nothing
。
现在,您可以使用 JRebel运行
和 JRebel调试
按钮来让 JRebel 启动相关的配置。
常见问题
网上收集的一些问题:
对于 Web 项目需要以"war exploded"形式发布,不能以"war"包形式发布。因为只有 war exploded 才会出现 update classes and resource