Jetty

时间:2015-09-01 10:28:28

标签: java deployment jetty

我正在编写一个Java EE应用程序,在开发过程中使用Jetty作为app服务器。虽然(重新)部署速度很快,但我希望Java代码更改能够立即反映在正在运行的服务器中,而无需重新启动。 (我已使用useFileMappedBuffer设置查看对静态投放内容的即时更改。

我已经看到有关使用Maven Jetty插件和设置scanInterval以重新部署Web上下文的问题,但这不是我想要做的。我的Jetty服务器是从Eclipse中的Java应用程序启动的,我希望代码更改能够立即反映在正在运行的服务器中,就像Eclipse中的普通Java应用程序一样。我正在运行代码"就位#34;即不首先构建和部署WAR文件。

我意识到Web应用程序有自己的类加载器以符合servlet规范,但我不介意冒着非标准行为的风险,以便在开发中更快地部署更改。我尝试使用WebAppContext.setClassLoader将类加载器设置为" normal" classloader但无济于事。

有可能做我想要的吗?我相信JRebel声称要做到这一点,但我做的是什么,我不是?

2 个答案:

答案 0 :(得分:1)

如果使用Eclipse中的remote debug连接到Jetty,则应该可以Hot code replace

通过在Jetty启动脚本中添加以下内容来启用远程调试:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787

答案 1 :(得分:1)

即使是普通的Java应用程序也需要重新启动以查看代码更改。

基本上你的选择是:

  1. 重启Jetty(你说你不想要那个)。
  2. 让Jetty扫描应用程序更改,并在检测到更改时允许热重新部署(您说您不想这样做)。
  3. 连接一个远程调试器,然后热插拔代码更改(请参阅Amila的答案)。这仅限于方法主体更改,因此不太有用。
  4. 使用JRebel,它提供了一个有用的热插拔实现,也可以为许多框架选择配置更改。
  5. 使用基于抛弃类加载器实现专有热插拔实现的Web框架(例如TapestryCivilian)。