Eclipse Kepler 和 JBoss Wildfly 热部署

21

我想使用 Eclipse Kepler 来进行 Java EE 7 开发。我已经安装了 JBoss Tools,并成功将 JBoss Wildfly 添加为服务器。然而,我的更改并没有自动部署。是否有任何方法可以像使用 Glassfish 一样自动部署应用程序?

5个回答

31

使用Eclipse,双击您的WildFly服务器以编辑以下属性:

  1. 发布:选择“构建事件后自动发布”。我还喜欢将发布间隔更改为1秒。
  2. 应用程序重新加载行为:选中“自定义应用程序重新加载...”复选框,并将正则表达式模式编辑为\.jar$|\.class$

就这样了。祝你好运!


2
+1 但不幸的是第二种选择有一个严重的缺点:整个应用程序状态都会丢失。 - G. Demecki
一个让它对我起作用的事情:不要部署为压缩文件。在Eclipse Wildfly属性中,不要勾选“将项目部署为压缩档案”的选项。 - Edu Castrillon

23

@varantes和@Sean的答案基本上是正确的,但这些答案并不完整。

不幸的是,在Java服务器环境中实现完全零停机热部署的唯一方法是使用付费的JRebel或免费的spring-loaded工具。

但对于小型项目,有一些方法可以通过部分热部署来加快工作速度。基本上:

  1. 启用选项资源更改时自动发布后, 在*.html*.xhtml文件内进行更改, 只要您刷新浏览器,更改就会立即反映出来。
  2. 如果要使*.jsp文件的热部署工作,那么您应该 在${wildfly-home}/standalone/configuration/standalone.xml 进行以下更改:
    <jsp-config/>
    替换为:
    <jsp-config development="true"/>

重新启动服务器,并享受Web文件的热部署。


但是,当修改*.java源代码文件时,只能进行部分热部署。正如@varantes在他的答案中所述,启用应用程序重新加载行为并将正则表达式模式设置为\.jar$|\.class$是一种选择,但存在严重缺点:整个模块都会重新启动,因此:

  1. 它需要一些时间(取决于模块的大小)。
  2. 整个应用程序状态将丢失。

因此,我个人不建议使用这种解决方案。JVM在调试模式下支持方法体代码的交换。只要您只修改现有方法的方法体,您就可以在家中(零停机时间,更改会立即反映出来)。但是,您必须在服务器设置中禁用自动发布,否则应用程序的状态仍将被该重新发布销毁。

但是,如果你需要大量编写Java代码(添加类、注释、构造函数),那么我只能建议将发布设置为从不自动发布(或关闭服务器),并在完成Java文件的工作后,手动重新启动模块(或打开服务器)。完全由你决定。


对于小型Java项目,这种方法可以奏效,但是对于大型项目,JRebel是不可或缺的(或者只使用spring-loaded),因为以上所有方法都无法满足需求。也正是因为这种问题,像Rails/Django/Play!框架这样的解决方案才会变得如此流行。


即使使用Play!框架,如果项目规模逐渐扩大到相当大的程度,你仍然会再次遇到同样的问题。 - Anton Arhipov
@AntonArhipov 我不明白为什么。你是指代码热替换存在问题吗?我觉得不是这个原因(虽然我从未见过如此大的Play!项目)。还是你指的是启动时间太长? - G. Demecki
具体来说,热代码替换。我在JRebel团队(仅供参考)工作,我们从未考虑为那些花哨的框架实现JRebel支持。但现在用户越来越多地询问支持 - 应用程序变得越来越大,本地框架重新加载无法跟上。 - Anton Arhipov
@G.Demecki,你已经帮助了我两次。我刚刚发现这个答案,意识到我之前已经找到并点赞了它!对不起,我不能再给你点赞了 :) 谢谢! - Stijn de Witt

8

假设您正在使用最新版本的Wildfly(编写时为8.0 Beta 1)。

在standalone.xml配置文件中,查找<jsp-config/>。添加属性development="true",即可进行热部署。结果配置将如下所示:

<jsp-config development="true"/>

嗨,@Sean。我已经这样做了,但当我更改Java源文件时,我没有注意到变化。然而,如果我更改xhtml文件,则会反映出来。 - zulqarnain

4
在 xPath = //servlet-container/jsp-config/ 中添加属性 (development, check-interval, modification-test-interval, recompile-on-fail) 到配置文件中。
<servlet-container name="default" default-buffer-cache="default" stack-trace-on-error="local-only">
    <jsp-config development="true" check-interval="1" modification-test-interval="1" recompile-on-fail="true"/>
</servlet-container>

(它在WildFly-8.0.0.Final中运行)


0

以调试模式启动服务器,它将跟踪方法内的更改。其他更改会要求重新启动服务器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接