【问题标题】:'Hot code replace' not working -- Eclipse doesn't change any code on JBoss“热代码替换”不起作用——Eclipse 不会更改 JBoss 上的任何代码
【发布时间】:2011-02-10 00:58:53
【问题描述】:

我目前遇到“热代码替换”无法在 Eclipse Galileo 和 JBoss 4.2.3 上运行的问题。

在其他应用程序中,我正在本地 JBoss 上运行爆炸式 Java WAR。构建它的项目由 Maven 管理。我使用 Maven 目标 war:exploded 构建项目,然后使用 ANT 脚本将该目录复制到 JBoss。

当我现在运行应用程序并在代码中的任意位置设置断点时,Eclipse 会在调试模式下正确地停在该行。 但是当我对源文件进行更改并保存它时,Eclipse 不会将此更改应用于 JBoss。 例如,当我将普通代码行添加到注释中时,调试器仍然会跳过该注释,就好像它是普通 Java 代码一样。或者当我删除一行时,调试器似乎与文件不同步并开始跳过括号。

但我也没有收到任何“热代码替换错误”消息。在我看来,Eclipse 将更改应用于源文件,但没有将其应用于 JBoss。

为了使热代码替换起作用,是否必须打开任何特殊首选项?或者我在构建应用程序并将其部署到 JBoss 的过程中是否有任何错误?

【问题讨论】:

    标签: java eclipse jboss remote-debugging hotswap


    【解决方案1】:

    我没有与 JBoss 合作,但我有两个建议。

    1. 如果您在 Eclipse 中使用启动配置运行应用程序

      您的“项目”-“自动构建”标志是否启用? 如果不是,则代码不会编译并在运行时被忽略。

    2. 在远程模式下调试应用程序时,不能更改代码,但可以更改参数值。 (我认为)

    【讨论】:

    • “项目 -> 自动构建”选项未启用。现在我已经激活它并且一切正常。丹克,马库斯。
    • 谢谢!这个问题已经让我发疯了好几个星期。热代码替换突然停止工作,没有任何错误消息。原来我已经关闭了“自动构建”。再次打开它就解决了这个问题。
    • 不需要设置“自动构建”。在您进行更改后“构建”项目很重要。
    • 在远程模式下调试应用程序时,您可以修改代码。热插拔并不总是有效,但是当你在 eclipse 中运行项目时它也并不总是有效。
    • 这是我用谷歌搜索时弹出的第一个答案,果然,我不确定这是怎么发生的,但我的Build Automatically 确实未选中。我很想知道为什么我的断点根本不匹配我的代码。
    【解决方案2】:

    我在使用 Maven 和 Eclipse 的项目中遇到问题。没有显示错误,但热代码替换不起作用。我读到必须检查“自动构建”。我检查了这个,它仍然没有工作。我的构建路径中的其他项目有一些错误。我相信那是错误。当我研究时,我发现我们必须取消选中“构建路径错误时中止构建”。我在下面的链接中给出了详细信息。

    【讨论】:

    • 感谢您的提示,尽管我没有构建错误(在我的任何(相关)项目中),取消选中此选项有帮助..!
    • ...链接在哪里??
    • 链接在这里:help.eclipse.org/juno/…。无论如何都不适合我:(
    • 我用 Eclipse 构建了 Maven。你如何在那个环境下做热代码。寻找解决方案。谢谢迪伦
    • 由于链接失效,我在下面扩展了一个新答案:stackoverflow.com/questions/2673554/…
    【解决方案3】:

    我在使用 Open Liberty 时遇到了类似的问题。让我在接受的答案以及来自@user513365 的答案的基础上再接再厉(因为那里的链接现在已经失效)。

    就我而言,我遇到了两个问题:

    1。构建路径错误

    在我的情况下,我的 Incomplete build path 是因为我使用的 Maven 项目只有 src/main/java 但没有 src/test/java (所以可能可以通过创建后者来解决这个问题)。

    但我能够通过转到 Preferences -> Java -> Compiler -> Building 并进行以下两项更改之一来修复 Hot Code Replace:

    要么:

    1. 取消选中发生构建路径错误时中止构建
    2. 使用下拉菜单,将 Incomplete build pathError 更改为 Warning

    2。确保 Eclipse 构建的类正在加载

    在我的情况下,我的远程 JVM 正在使用来自本地 .m2 Maven 存储库的完整 JAR 工件。启用的公认答案:“项目”-“自动构建”在这里忽略了一个微妙之处。

    如果我在附加调试器后进行 Eclipse 构建,那么在我的案例中构建的 Eclipse 项目只会进行热代码替换。是的,它会自动构建 Eclipse,但是如果我重新启动远程 JVM 并简单地附加调试器,它仍然被配置为从我的本地 .m2 JAR 加载这个类,而不是获取我的本地更改。

    关于此答案的最后说明 VS。其他答案

    如果您不断更改您正在自动构建的类,您可能不会注意到第 2 点中的微妙之处,而接受的答案与@user513365 的答案中提到的构建路径错误相结合将是您所需要的。

    【讨论】:

      【解决方案4】:

      首先检查项目/构建自动。

      可能还需要检查应用服务器部署配置,

      例如对于 JBoss,在 Eclipse 中,在 Servers 视图中,双击服务器,然后有一个 Deployment Scanners 部分,其中包含两个复选框:

      • 添加缺少的部署扫描器
      • 在关机前移除添加的部署扫描器

      https://docs.jboss.org/author/display/AS7/Deployment+Scanner+configuration JBoss AS/ Deployment Scanner configuration

      【讨论】:

        【解决方案5】:

        我最近在 Eclipse 2019-06 中遇到了这个问题,发现我不得不取消选中 Preferences->Java->Debug->Hot Code Replace 中“替换包含编译错误的类文件”中的选项团体。检查了所有其他选项。 在这样做之前,我得到“热代码替换失败 - 删除方法未实现”,尽管我唯一的改变是调用 System.out.println。 一旦我更改了该选项(在同一个调试会话中),它就开始为我工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多