【问题标题】:JRebel less useful in IntelliJ than Eclipse?JRebel 在 IntelliJ 中的用处不如 Eclipse?
【发布时间】:2017-09-20 19:07:38
【问题描述】:

我刚刚在 IntelliJ 中设置了 JRebel 以与我的 Spring Web 应用程序一起使用,并且非常惊讶地发现,每次我想要反映我的更改时,我都必须手动重建项目/重新编译。这不是违背了 JRebel 的全部目的吗?我在这里缺少什么吗?使用 Eclipse,它几乎是即时的,可以在任何地方进行更改、保存,并立即反映在正在运行的应用程序中。使用 IntelliJ,该过程似乎非常笨拙。我在这里遗漏了什么吗?

【问题讨论】:

    标签: intellij-idea jrebel


    【解决方案1】:

    在 IntelliJ 中使用 JRebel 运行涉及使用 Run > Run with JRebel 启动您的应用程序,当您更改应用程序代码时,您必须构建项目以便 IntelliJ 编译类和更新您的应用程序。

    您可以通过运行 SHIFT + F9Build > Build Project 来做到这一点

    来自 JRebel 文档:

    JRebel 依赖于您的 IDE 进行编译。 JRebel 重新加载您编译的 .class 文件,而不是您的 .java 文件。当您更改代码时,JRebel 会将更改的类和资源推送到服务器,而无需重新部署。

    无论您使用什么 IDE,JRebel 仍然需要 IDE 来编译类,然后才能更新正在运行的应用程序。 IntelliJ 在这方面与 Eclipse 没有什么不同。 也许 Eclipse 只是在您不知道的情况下自动构建项目。您还可以指示 IntelliJ 从 Preferences > Build, Execution, Deployment > Compiler > Build project automatically 自动构建。

    这是显示该配置设置的屏幕截图:

    【讨论】:

    • 我明白了。虽然它似乎有点慢,但也许这只是我的想法,因为我必须手动完成。我会试试那个自动设置,谢谢
    • 此外,Eclipse 增量编译器可能会不时重建整个项目。然后即使源没有真正改变,*.class 文件的时间戳也会更新。由于 JRebel 默认只依赖文件的时间戳(出于性能原因),它可能会开始重新加载太多的类。如果在使用 Eclipse 时这种情况经常发生,您可能需要设置 -Drebel.check_class_hash=true VM 参数以启用基于散列的方法来进行更改检测。
    • 在 IntelliJ IDEA 中,自动编译有一个延迟:首先自动保存有一个延迟,即 2000 AFAIR,然后编译器启动有 300 毫秒的延迟。这些超时可在内部注册表中配置。所以可能需要一些时间来适应:)
    • @AntonArhipov:感谢您提供更多信息
    • 在 JRebel 代理(非旧版)上默认启用哈希检查
    猜你喜欢
    • 1970-01-01
    • 2017-02-18
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多