OpenLiberty server.xml中能否为应用路径使用通配符?
OpenLiberty的application标签location属性不支持通配符匹配,所以你直接用my-company-project-*.war会触发CWWKZ0014W警告,因为服务器无法定位到具体的文件。以下是几种实用的替代方案,不用每次版本变更都修改server.xml:
方法1:使用软链接(符号链接)
在WAR包的部署目录(比如OpenLiberty的apps目录)里,创建一个不带版本号的软链接,指向当前实际的带版本WAR包:
- Linux/macOS执行:
ln -s my-company-project-vX.Y.war my-company-project.war - Windows执行(需管理员权限):
mklink my-company-project.war my-company-project-vX.Y.war
然后在server.xml里把location设为软链接的名称:
<application location="my-company-project.war" .../>
版本更新时,只需要重新创建软链接指向新的WAR包即可,完全不用修改server.xml。
方法2:利用OpenLiberty的dropins自动部署
把带版本的WAR包直接放到OpenLiberty的dropins目录下,服务器会自动检测并部署该应用,不需要在server.xml里配置application标签。
如果需要自定义应用名称、上下文根等配置,可以在dropins目录下新建一个同名的XML配置文件(比如my-company-project.xml),内容如下:
<application id="my-company-project" name="my-company-project" location="my-company-project-vX.Y.war" contextRoot="/my-project" type="war"/>
版本更新时,只需要替换WAR包并修改这个XML文件里的location值(如果接受应用名称带版本,连XML文件都不用改)。
方法3:使用环境变量替换
在server.xml里用变量指定location:
<application location="${app.war.path}" .../>
然后在OpenLiberty服务器的server.env文件(位于servers/[你的服务器名]/目录下)中添加变量定义:
app.war.path=my-company-project-vX.Y.war
版本更新时,只需要修改server.env里的变量值,不用改动server.xml。
为什么通配符无效?
OpenLiberty要求application的location必须指向唯一明确的文件,通配符可能匹配多个文件,导致服务器无法确定要部署的应用,因此不支持这种模糊匹配方式。
内容的提问来源于stack exchange,提问作者Mohammad Faisal

