“热代码替换”无法正常工作 - Eclipse不会更改JBoss上的任何代码

时间:2010-04-20 08:12:06

标签: java eclipse jboss remote-debugging hotswap

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

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

当我现在正在运行应用程序并在代码中的任何位置设置断点时,Eclipse在调试模式下正确地在该行停止。 但是当我对源文件进行更改并保存时,Eclipse不会将此更改应用于JBoss。 例如,当我将正常的代码行放入注释时,调试器仍然会将此注释作为常规Java代码进行操作。或者当我删除一行时,调试器似乎与文件不同步并开始踩过括号。

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

是否需要打开任何特殊首选项才能使热代码替换工作?或者我是如何构建应用程序并将其部署到JBoss的?

5 个答案:

答案 0 :(得分:41)

我没有使用JBoss,但我有两个建议。

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

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

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

答案 1 :(得分:8)

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

答案 2 :(得分:1)

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

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

E.g。对于JBoss,在Eclipse中,在Servers视图中,双击服务器,并且有一个Deployment Scanners部分,其中包含两个复选框:

  • 添加缺少的部署扫描程序
  • 在关闭之前删除添加的部署扫描程序

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

答案 3 :(得分:1)

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

就我而言,我有两个问题:

1.构建路径错误

就我而言,我的不完整的构建路径是因为我使用的 Maven 项目只有 src/main/java 但没有 src/test/java (所以可能可以通过创建后者来解决这个问题)。

但是我能够通过转到首选项 -> Java -> 编译器 -> 构建 并进行以下两个更改之一来修复热代码替换:

要么:

  1. 取消选中发生构建路径错误时中止构建
  2. 使用下拉菜单,将不完整的构建路径Error 更改为 Warning

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

在我的例子中,我的远程 JVM 使用的是我本地 .m2 Maven 存储库中的完整 JAR 工件。启用的公认答案:“项目”-“自动构建”在这里遗漏了一个微妙之处。

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

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

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

答案 4 :(得分:0)

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