如何在 OpenLiberty 中为单个文件激活热部署?

How to activate hot-deployment in OpenLiberty for single files?

我已经安装了openLiberty 20.0.0,我想激活hotdeployment。 为此,我将 applicationMonitor 标签添加到 server.xml

<applicationMonitor updateTrigger="polled" pollingRate="500ms"
                dropins="dropins" dropinsEnabled="true"/>

但这些似乎已经是默认设置了。所以也许我可以离开它。

我还添加了自动扩展功能

<applicationManager autoExpand="true" />

现在,当我将 .war 文件部署到 dropins 文件夹时,openLiberty 会自动识别应用程序并立即部署。目前为止一切正常。

但据我所知,还应该在我的 运行 应用程序中识别和更新单个源文件的热部署(例如 .html、.xhtml。)需要全面重新部署。

例如,如果我更改应用程序文件夹中的单个 jsf 文件

./dropins/myapplication.war/my-page.jsf

没有任何反应。 我错过了什么让 OpenLiberty 也能识别这个微小的文件更改?

简单回答:

删除 <applicationManager autoExpand="true" /> 一切都会如您所愿。


更长的答案:

如果您的 server.xml 配置中有 <applicationManager autoExpand="true" />,则应用程序将自动扩展到位于 ${server.config.dir}/apps/expanded/APP_NAME/

的新文件夹中

因此,当您 运行 应用程序时,您将拥有如下文件布局:

./server.xml
./dropins/myapplication.war
./apps/expanded/myapplication.war/my-page.jsf
./apps/expanded/myapplication.war/WEB-INF/classes/com/foo/SomeAppClass.class

"active" 组文件将是 apps/expanded/ 文件夹下的文件,然后您可以对其进行热更新。如果您想部署单个 .war 文件,然后在部署后对其进行调整,例如在开发模式下,这种方法很有用。但是,直接对展开的文件夹进行更改要谨慎,因为如果重新启动服务器并重新展开应用程序,它可能会被擦除。


一般情况下,用户不需要war了解应用扩展或热更新的细节,因为如果您使用Liberty dev mode,这一切都已解决。如果你还没有厌倦它,我强烈推荐它。