
open liberty 的 `server.xml` 不支持在 `
在 Open Liberty 中,<application> 元素的 location 属性必须指向一个确切存在的、唯一的归档文件路径(例如 my-company-project-v1.2.war)。尝试使用 location="my-company-project-*.war" 会失败,并在日志中输出类似 CWWKZ0014W: The application ... could not be found at location ... 的警告——这是因为 Open Liberty 的部署机制在启动时仅执行字面量路径解析,不支持 glob 模式、正则表达式或任何通配语义。
✅ 正确实践:构建阶段标准化文件名
与其在部署配置中“适配多版本”,不如在构建阶段确保 WAR 文件名稳定。以 Maven 为例,可在 pom.xml 中通过 <finalName> 固定输出名称,彻底剥离版本信息:
<build> <finalName>my-company-project</finalName> </build>
这样无论 pom.xml 中的 <version> 是 1.2、2.0.0-SNAPSHOT 还是 3.1.4,最终生成的 WAR 始终为 my-company-project.war。随后 server.xml 可安全、简洁地声明:
<application context-root="my-company-project" id="my-company-project-war" name="my-company-project-war" type="war" location="my-company-project.war"/>
? 补充建议:
- 若需保留版本标识,可将其写入 WAR 内部的 MANIFEST.MF(如 Implementation-Version: 2.5.1)或通过 /actuator/info(Spring Boot)等运行时端点暴露,而非体现在文件名上;
- 使用 CI/CD 流水线时,可配合构建参数(如 -DfinalName=my-company-project)动态控制输出名;
- Open Liberty 本身支持自动部署(dropins/ 目录),但该机制同样不支持通配符扫描——它仅检测新增/变更的完整文件名。
总之,通配符在 location 中不可行,根本解法是构建时解耦版本号与文件名。这不仅提升部署稳定性,也符合云原生应用“构建一次、随处运行”(Build Once, Run Anywhere)的最佳实践。










