Open Liberty server.xml 中无法使用通配符指定应用路径

open liberty 的 `server.xml` 不支持在 `application>` 的 `location` 属性中使用通配符(如 `*.war`

),因为该属性要求精确匹配单个文件路径;若允许通配符,可能匹配多个 war 文件,导致部署歧义。推荐方案是构建时统一 war 文件名(如移除版本号),而非依赖运行时通配匹配。

在 Open Liberty 中, 元素的 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 中通过 固定输出名称,彻底剥离版本信息:


  my-company-project

这样无论 pom.xml 中的 是 1.2、2.0.0-SNAPSHOT 还是 3.1.4,最终生成的 WAR 始终为 my-company-project.war。随后 server.xml 可安全、简洁地声明:

? 补充建议:

  • 若需保留版本标识,可将其写入 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)的最佳实践。