【问题标题】:Do I have to generate rebel.xml to reload JRebel changes?我是否必须生成 rebel.xml 才能重新加载 JRebel 更改?
【发布时间】:2017-02-10 11:42:29
【问题描述】:

我有一个简单的 Spring Boot 应用程序,我注意到即使没有 rebel.xml,它也会重新加载更改? 该文件的用途是什么?

【问题讨论】:

  • AFAIK rebel.xml 有两个目的:作为触发器(仅监视包含该文件的工件的更改)和作为配置(要监视的(重新)来源)。如果 Spring Boot 即使没有 rebel.xml 也能接受更改,我猜想不是 JRebel 会重新加载,因此您也可以在没有 JRebel 代理的情况下运行。也看看rebel.xml documentation

标签: java jrebel


【解决方案1】:

JRebel 使用 rebel.xml 文件将类路径资源和 servlet 资源重新映射到构建目录,这样当您在 IDE 中进行更改并构建类时,JRebel 将检测到该构建目录中的更改并重新加载更改的类。

不管 rebel.xml 文件是什么,JRebel 都会监视它在类路径中可以找到的所有目录。它不监视 jar、war 文件。 因此,如果使用 JRebel 启动一个 jar 文件而没有 rebel.xml 文件,那么它将没有任何要监视的目录,也无法重新加载任何内容。

这就是需要 rebel.xml 文件的原因:

  1. 让 JVM 从构建目录加载类
  2. 将 rebel.xml 中的目录添加到类路径中,以便 JRebel 监控它们

但是,在很多情况下,当在 IDE 中运行独立应用程序时,IDE 不会运行 jar 文件,而是直接运行构建目录中的类并将构建目录添加到类路径中。

在这种情况下,正在运行的类已经在构建文件夹中,因此它们是可重新加载的,并且更改发生在由 JRebel 监控的目录中。这样的设置不需要 rebel.xml 文件。 从 IDE 启动的爆炸式 Web 应用程序有时也会发生同样的情况。

您可以通过在命令行中运行应用程序来检查您的应用程序是否也是这种情况。

首先使用 JRebel 运行 Spring Boot jar 文件而不使用 rebel.xml 文件,您将看到不会发生重新加载。要查看重新加载,您需要生成 rebel.xml 文件并将其构建到 jar 中。

但是,当您将构建目录添加到类路径并运行该类时,JRebel 应该重新加载类而不需要 rebel.xml 文件。

您可以从此处阅读有关 rebel.xml 文件的更多信息:https://manuals.zeroturnaround.com/jrebel/standalone/config.html

【讨论】:

    【解决方案2】:

    JRebel 不仅仅是 rebel.xml 文件。

    基本上有3个不同的部分:

    • rebel.xml:定义受“热交换”影响的 IDE 资源的范围。换句话说:该文件控制哪些文件可以“热交换”。
    • rebel-remote.xml:可能需要告诉使用 JRebel 代理的“远程服务器”关于符合“热交换”条件的“组件”
    • 当然:“远程服务器”本身的性质;因为这可能只是您的 IDE 在本地启动的一个过程;还有一个在不同机器上独立运行的 JVM。

    长话短说:您似乎在没有学习如何使用的情况下就开始使用此工具。因此,这里的基本答案是:去,阅读手册。比如开始here

    【讨论】:

    • 主场景只需要rebel.xml,除非编译器目标文件夹与加载资源的位置不同。当应用程序/服务器远程运行时,具体场景需要额外的rebel-remote.xml和远程服务器配置。
    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    相关资源
    最近更新 更多