【问题标题】:JRebel constantly reloading every client-side class file with GWTJRebel 不断地使用 GWT 重新加载每个客户端类文件
【发布时间】:2013-10-15 09:50:36
【问题描述】:

我们正在考虑从 Eclipse 切换到 IntelliJ IDEA。我们必须使用 JRebel,这样我们就不必每次更改一行代码时都重新启动应用程序。

每次我更改一个 .java 文件中的一行代码,并在该特定文件上调用 IntelliJ make 过程后,JRebel 似乎都会重新加载一大堆客户端类。

在 Eclipse 中,这种残酷的重新加载行为有时可能会发生,但在大多数情况下,类的重新加载过程要快得多!

我认为我遗漏了一些东西。 有使用 IntelliJ 和 JRebel 经验的人知道如何让 JRebel 插件在不需要更多内容时重新加载一个类吗?

任何帮助将不胜感激!

  • 注 1:我知道超级开发模式会有所帮助,但我想拥有 JRebel 插件首先工作。
  • 注意 2:VM arg -Drebel.check_class_hash=true 也有帮助,但我不认为该插件应该以这种方式工作。

【问题讨论】:

  • 只是好奇,JRebel 与超级开发模式相比有什么优势? JRebel 有没有超级开发模式做不到的事情?
  • 嗨,JRebel 家伙。我想你想让我说我为什么喜欢 JRebel 不是吗:)?我们正在编写一个具有复杂工作流程的大型企业应用程序。 JRebel 允许我们重新加载部分工作流,甚至是我所在的部分,而无需重新加载应用程序。否则这将迫使开发人员重新启动复杂的向导,即使有 Selenium 的帮助,这也是一种痛苦。从用户的角度来看,JRebel 以相同的方式处理客户端和服务器端代码。 Super Dev Mode 重新编译整个应用程序,而 JRebel 更快,因为它只重新编译几个文件(至少在 Eclipse 中)。
  • 好吧,我的目标实际上是弄清楚我们是否愿意花时间添加对 GWT 的特殊支持,尽管有超级开发模式。如果超级开发模式适用于人们,我们就不会花时间在 GWT 集成上——很简单。顺便说一句,JRebel 确实会重新编译任何东西,它只使用编译器(javac,ejc)的结果并更新正在运行的应用程序中的类和资源。

标签: gwt intellij-idea jrebel


【解决方案1】:

-Drebel.check_class_hash=true 是针对这种情况引入的。但是您实际上应该检查的是为什么您的客户端类被重新加载。当类文件的时间戳改变时,JRebel 会重新加载类,或者,如果设置了 -Drebel.check_class_hash=true,它会在时间戳之外检查哈希。

所以首先要寻找的是,当您创建一个类时,其他类的时间戳(JRebel 重新加载)是否发生了变化?也许 IntelliJ 为 GWT 构建的只是在编译期间接触了太多文件?或者您可以只编译一个类,即您实际更改的类。

我的一个假设是,如果上述情况不正确,那么 GWT.create 在您的代码中某处您正在更改,它必须在 make 期间重新运行,否则您所做的更改将不会' 不被传播。这只会由 make 过程触发,并且 JRebel 不会自行触发重新运行 GWT.create。这只是一个假设,所以请不要 100% 认真对待它。

您也可以尝试联系 JRebel 支持。

【讨论】:

  • 感谢您的回答。我不知道为什么要重新加载这些类。我是 IDEA 制作过程的新手。但我知道这是问题的核心。没有 GWT.create 调用。然而,一些资源是使用 GIN 注入的。当你说 GWT.create 必须重新运行时,你的意思是如果我的代码中有一个 GWT.create 调用,那么所有以这种方式创建的类都必须重新加载? GIN 注入会导致相同的行为吗?无论如何感谢您的建议。如果您希望在另一个论坛上回答,我会尝试联系 JRebel 支持。
  • 所以我去了 JRebel 支持。根据他们的说法,在 IntelliJ 中使用 -Drebel.check_class_hash=true 是正确的行为。 zeroturnaround.com/forums/topic/…@Anton 感谢您的反馈。
猜你喜欢
  • 2011-04-30
  • 1970-01-01
  • 2023-04-01
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多