Jetty 热代码部署
Hot code deployment in Jetty
我正在编写一个 Java EE 应用程序,使用 Jetty 作为应用程序服务器以方便开发。尽管(重新)部署速度很快,但我希望 Java 代码更改无需重新启动即可立即反映在 运行 服务器中。 (我已经在使用 useFileMappedBuffer
设置来查看对静态服务内容的即时更改)。
我已经看到有关使用 Maven Jetty 插件和设置 scanInterval 以重新部署 Web 上下文的问题,但这不是我想要做的。我的 Jetty 服务器是从 Eclipse 中的 Java 应用程序启动的,我希望代码更改能够立即反映在 运行 服务器中,就像 Eclipse 中的普通 Java 应用程序一样。我是 运行 代码 "in place",即不首先构建和部署 WAR 文件。
我知道网络应用程序有自己的 class 加载程序以符合 servlet 规范,但我不介意冒非标准行为的风险,以便在开发过程中更快地部署更改。我尝试使用 WebAppContext.setClassLoader
将 classloader 设置为 "normal" classloader 但无济于事。
是否可以如我所愿?我相信 JRebel 声称会这样做,但它在做什么而我不是?
如果您使用 remote debug from Eclipse, Hot code replace 连接到 Jetty 应该是可能的。
通过将以下内容添加到 Jetty 启动脚本来启用远程调试:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787
即使是普通的 Java 应用程序也需要重新启动才能看到代码更改。
基本上你的选择是:
我正在编写一个 Java EE 应用程序,使用 Jetty 作为应用程序服务器以方便开发。尽管(重新)部署速度很快,但我希望 Java 代码更改无需重新启动即可立即反映在 运行 服务器中。 (我已经在使用 useFileMappedBuffer
设置来查看对静态服务内容的即时更改)。
我已经看到有关使用 Maven Jetty 插件和设置 scanInterval 以重新部署 Web 上下文的问题,但这不是我想要做的。我的 Jetty 服务器是从 Eclipse 中的 Java 应用程序启动的,我希望代码更改能够立即反映在 运行 服务器中,就像 Eclipse 中的普通 Java 应用程序一样。我是 运行 代码 "in place",即不首先构建和部署 WAR 文件。
我知道网络应用程序有自己的 class 加载程序以符合 servlet 规范,但我不介意冒非标准行为的风险,以便在开发过程中更快地部署更改。我尝试使用 WebAppContext.setClassLoader
将 classloader 设置为 "normal" classloader 但无济于事。
是否可以如我所愿?我相信 JRebel 声称会这样做,但它在做什么而我不是?
如果您使用 remote debug from Eclipse, Hot code replace 连接到 Jetty 应该是可能的。
通过将以下内容添加到 Jetty 启动脚本来启用远程调试:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787
即使是普通的 Java 应用程序也需要重新启动才能看到代码更改。
基本上你的选择是: