【问题标题】:What does the support of JRebel for an app (non-IDE) mean?JRebel 对应用程序(非 IDE)的支持是什么意思?
【发布时间】:2017-11-20 22:49:53
【问题描述】:

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

根据我在常见问题解答中阅读的内容,JVM 使用 JRebel jar 作为插件运行良好,并且为 JRebel 声明的任何类都会在更改时重新加载,同时相应的应用程序 jar 正在运行。

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

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

我理解支持 IDE 的需要,因为 JRebel 必须连接源代码的行,因为我在 IDE 中看到它们与在 JVM 中运行的字节码。好的。

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

【问题讨论】:

    标签: java eclipse intellij-idea jvm jrebel


    【解决方案1】:

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

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

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

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

    附带说明,JRebel 可以处理已编译的类文件,因此除了调试器之外,IDE 不需要支持。例如,任何人都可以使用 vim 开发 java 并使用 JRebel。

    【讨论】:

    • 并且我可以配置将被监听的类的文件夹列表,并且它们的更改会导致重新加载?那么,对于我的应用程序,我可以设置所需的一切,并且不需要任何“支持”?
    • 没错!只需使用类路径配置 rebel.xml 并重新加载。确定您的应用程序是否需要任何支持的最佳方法是尝试各种重新加载。如果您确实发现重新加载不会提供与应用程序重新启动相同的输出的用例,您可以发送一行到 support@zeroturnaround.com,如果需要,我们非常乐意调查并帮助创建自定义插件.
    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多