我正在尝试将 eclipse kepler 用于 Java EE 7。我已经安装了 JBoss Tools 并成功添加了 JBoss Wildfly 作为服务器。但是,我的更改不会自动部署。无论如何,该应用程序是否可以像使用 glassfish 时一样自动部署?
5 回答
使用 Eclipse,在 WildFly 服务器上单击两次以编辑以下属性:
- 发布:选择“构建事件后自动发布”。我也喜欢将发布间隔更改为 1 秒。
- 应用程序重新加载行为:选中“自定义应用程序重新加载...”复选框并将正则表达式模式编辑为
\.jar$|\.class$
就是这样。祝你好运!
@varantes 和 @Sean 基本上都是正确的,但这些答案并不完整。
不幸的是,在 Java 服务器环境中实现完整、零停机热部署的唯一方法是使用付费的JRebel或免费的弹簧加载工具。
但是对于小型项目,有一些方法可以通过部分热部署来加速工作。本质上:
- 当启用选项自动发布时资源更改
然后内部更改时
*.html
,*.xhtml
文件会在您刷新浏览器时立即反映。 - 要使热部署也适用于
*.jsp
文件,那么您应该在${wildfly-home}/standalone/configuration/standalone.xml 中 进行以下更改:
<jsp-config/>
替换为:
<jsp-config development="true"/>
重启服务器,享受网络文件的热部署。
但是在修改*.java
源文件时,只能进行部分热部署。正如@varantes 在他的回答中所说,启用应用程序重新加载行为并将正则表达式模式设置为\.jar$|\.class$
是一个选项,但有严重的缺点:重新启动整个模块,因此:
- 这需要一些时间(取决于模块有多大)。
- 整个应用程序状态丢失。
所以就个人而言,我不鼓励这种解决方案。JVM 支持(在调试模式下)方法主体的代码交换。因此,只要您只修改现有方法的主体,您就在家(零停机时间,更改会立即反映)。但是您必须在服务器设置中禁用自动发布,否则应用程序的状态仍将被重新发布破坏。
但是,如果您正在大量编写 Java 代码(添加类、注释、构造函数),那么不幸的是,我只能建议将发布设置为从不自动发布(或关闭服务器),当您在 Java 文件中完成工作时,然后手动重新启动您的模块(或开启服务器)。由你决定。
它适用于小型 Java 项目,但对于较大的项目,JRebel 是无价的(或只是弹簧加载的),因为上述所有方法都不够用。也因为这样的问题,解决方案像 Rails/ Django /Play!框架获得了如此巨大的人气。
我假设您使用的是最新版本的 Wildfly(截至写作时为 8.0 Beta 1)。
在standalone.xml 配置文件中,查找<jsp-config/>。添加属性development="true"并且它应该热部署。生成的配置将如下所示:
<jsp-config development="true"/>
在 xPath = //servlet-container/jsp-config/ 的配置文件中添加属性(开发、检查间隔、修改测试间隔、失败时重新编译)
<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)
以调试模式启动服务器,它将跟踪方法内的机会。其他更改 它会要求重新启动服务器。