我想使用 Eclipse Kepler 来进行 Java EE 7 开发。我已经安装了 JBoss Tools,并成功将 JBoss Wildfly 添加为服务器。然而,我的更改并没有自动部署。是否有任何方法可以像使用 Glassfish 一样自动部署应用程序?
我想使用 Eclipse Kepler 来进行 Java EE 7 开发。我已经安装了 JBoss Tools,并成功将 JBoss Wildfly 添加为服务器。然而,我的更改并没有自动部署。是否有任何方法可以像使用 Glassfish 一样自动部署应用程序?
使用Eclipse,双击您的WildFly服务器以编辑以下属性:
\.jar$|\.class$
就这样了。祝你好运!
@varantes和@Sean的答案基本上是正确的,但这些答案并不完整。
不幸的是,在Java服务器环境中实现完全零停机热部署的唯一方法是使用付费的JRebel或免费的spring-loaded工具。
但对于小型项目,有一些方法可以通过部分热部署来加快工作速度。基本上:
*.html
、*.xhtml
文件内进行更改,
只要您刷新浏览器,更改就会立即反映出来。*.jsp
文件的热部署工作,那么您应该
在${wildfly-home}/standalone/configuration/standalone.xml
进行以下更改:<jsp-config/>
<jsp-config development="true"/>
重新启动服务器,并享受Web文件的热部署。
但是,当修改*.java
源代码文件时,只能进行部分热部署。正如@varantes在他的答案中所述,启用应用程序重新加载行为并将正则表达式模式设置为\.jar$|\.class$
是一种选择,但存在严重缺点:整个模块都会重新启动,因此:
因此,我个人不建议使用这种解决方案。JVM在调试模式下支持方法体代码的交换。只要您只修改现有方法的方法体,您就可以在家中(零停机时间,更改会立即反映出来)。但是,您必须在服务器设置中禁用自动发布,否则应用程序的状态仍将被该重新发布销毁。
但是,如果你需要大量编写Java代码(添加类、注释、构造函数),那么我只能建议将发布设置为从不自动发布(或关闭服务器),并在完成Java文件的工作后,手动重新启动模块(或打开服务器)。完全由你决定。
对于小型Java项目,这种方法可以奏效,但是对于大型项目,JRebel是不可或缺的(或者只使用spring-loaded),因为以上所有方法都无法满足需求。也正是因为这种问题,像Rails/Django/Play!框架这样的解决方案才会变得如此流行。
假设您正在使用最新版本的Wildfly(编写时为8.0 Beta 1)。
在standalone.xml配置文件中,查找<jsp-config/>。添加属性development="true",即可进行热部署。结果配置将如下所示:
<jsp-config development="true"/>
<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中运行)
以调试模式启动服务器,它将跟踪方法内的更改。其他更改会要求重新启动服务器。