我在 Tomcat 上将热插拔 java 调试功能与 Web 应用程序一起使用。在更改了一些类签名之后,我得到了“热代码替换失败”Eclipse 对话框——我明白这一点。
在这种情况下,我想要的是重新发布应用程序(我可以这样做)并使用新部署的代码。但是调试器仍然会抱怨,直到我重新启动服务器。因为其他应用程序和长时间启动我不想要那样。
有没有办法告诉调试器,新的类版本已经重新加载到新的 webapp 类加载器中,并且可以保存以继续?
谢谢。
你为什么不试试 JRebel 呢?JRebel 是一个 JVM Java 代理,它与应用程序服务器集成,使类可以使用现有的类加载器重新加载。只有更改的类会被重新编译并立即重新加载到正在运行的应用程序中。JRebel 插入 IDE 和构建系统。类和静态资源直接从工作区加载。 http://zeroturnaround.com/software/jrebel/
问候, 安德里亚
您是否尝试过服务器选项 - 在不发布的情况下提供模块服务?
也不确定您对其他应用程序的看法。
有一个旧的 PHD 项目。制作它的人是由 Oracle 带来的,但他的工作没有进入 Java 8,希望能在 Java 9 中看到,但更有可能出现在 Java 10 中。我猜 Java 8 有一个新版本。我还没试过。
我的原始问题以获取更多信息:JDK 8 中的高级代码热交换?
以及 Github 上的项目页面:https ://github.com/dcevm/dcevm
有了这个,您几乎可以热替换任何类更改,从而使您无需重新启动 JDK。(除了静态对象和单例的副作用,但这是合乎逻辑的)