20

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

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

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

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

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

4

5 回答 5

46

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

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

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

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

于 2010-04-20T08:14:19.557 回答
10

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

于 2010-11-19T10:56:10.943 回答
2

我对 Open Liberty 也有类似的问题。让我在接受的答案以及来自@user513365 的答案的基础上再接再厉(因为那里的链接现在已经死了)。

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

1.构建路径错误

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

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

任何一个:

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

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

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

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

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

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

于 2021-02-10T20:04:34.027 回答
1

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

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

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

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

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

于 2016-12-21T16:30:17.823 回答
0

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

于 2019-06-24T17:03:07.390 回答