JRebel 对应用程序(非IDE)的支持是什么意思?

What does the support of JRebel for an app (non-IDE) mean?

我有一个用作轻型主机的 Eclipse 插件,可以在其上 运行 应用程序。我正在尝试改进开发过程并考虑使用 JRebel。

根据我在 FAQ 中阅读的内容,JVM 运行 很高兴将 JRebel jar 作为插件使用,任何为 JRebel 声明的 class 都会在更改时重新加载,而适当的应用程序 jar 运行宁.

所以,我 "simply" 使用 IDE 的 JRebel 插件启动 Eclipse 或 IntelliJ,使用 JVM 的 JRebel 插件启动其中的主机,在主机中安装应用程序,再次使用 JRebel 启动它们的 jar JVM 的插件,我很高兴地看到与 运行ning jar 和 classes 相关的代码行在更改时重新加载。

但是...阅读 JRebel https://zeroturnaround.com/software/jrebel/download/ ,在页面底部我可以看到 JRebel[= 支持的服务器和其他应用程序33=].

我理解支持 IDEs 的必要性,因为 JRebel 必须连接源代码的行,正如我在 IDE 中看到的那样,它们带有字节码,运行在 JVM 中运行。好的

但这意味着什么 - JRebel 支持 的服务器或其他应用程序?如果任何 jar 可以在 JVM 中使用 JRebel jar 作为插件 运行,正如他们在 FAQ 中解释的那样,哪里需要一些特殊支持?换句话说,在什么意义上应用程序可以不受支持?换句话说,我们的插件和应用程序 不受支持?

JRebel 的核心使 classes 能够重新加载,因此您可以像重新启动应用程序一样看到结果。这包括通过反射和其他对 class 元数据进行操作的 JDK 工具访问 class 信息。

正如这暗示的那样,仅进行 class 重新加载的主要问题是几乎所有内容都在缓存中间结果并仅在应用程序启动时计算一些信息。假设 class 或框架配置文件在运行时不会更改通常是一个很好的选择。

出于这个原因,JRebel 必须提供额外的集成以保持 class 重新加载的错觉,因为现在大多数应用程序都依赖于大量的库、应用程序服务器和框架。例如,spring 应用程序将扫描组件并仅在启动时连接 bean。简单的 class 重新加载是不够的,因此额外的集成必须在需要时重新扫描和重新连接 bean。

然而,也有很多库不需要额外的支持。术语 supported 表示特定服务器或框架具有所需的集成并且每天进行集成测试 运行。如果未列出任何库或框架,则表示它未经测试或不需要额外集成。

作为旁注,JRebel 在编译的 class 文件上工作,因此 IDE 除了调试器之外不需要支持。任何人都可以用 vim 开发 java,例如使用 JRebel 就好了。