如何在Tomcat中部署带版本号的.war文件并保持访问路径固定
Tomcat固定带版本号war包访问路径的解决方案
首先明确:当war包直接放置在
webapps目录下触发自动部署时,META-INF/context.xml中配置的path属性默认不会生效,这是Tomcat的内置部署规则,不属于配置错误。
以下是可落地的3种解决方案:
方案1:固定war包打包名称(操作最简单,适用性最广)
如果不需要在部署后的包名上保留版本号,可以直接在打包工具中配置固定输出名称:
- 如果使用Maven构建,在
pom.xml的build节点下添加finalName配置即可固定war包名:
<build> <!-- 固定输出war包名为myproject.war,无版本号 --> <finalName>myproject</finalName> <!-- 其余build相关配置 --> </build>
- 如果要配置根路径访问,直接将
finalName设为ROOT即可,打包后生成ROOT.war,部署后直接通过域名根路径访问。
这种方式生成的war包名称固定,部署后context路径不会随版本迭代变化。
方案2:外置Context配置(保留war包版本号,方便版本追溯)
如果需要保留war包文件名的版本号做版本管理,不需要修改包名,可通过Tomcat外置Context配置实现路径固定:
- 进入Tomcat安装目录的
conf/Catalina/localhost文件夹,若文件夹不存在则手动创建 - 新建xml配置文件,文件名对应你要固定的context路径:例如要固定访问路径为
/myproject,就新建myproject.xml;要配置根路径访问就新建ROOT.xml - 在xml文件中添加如下配置:
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="/你存放war包的绝对路径/myproject-1.0.0-SNAPSHOT.war" reloadable="true" />
后续版本迭代时,只需要替换docBase指向的war包即可,访问路径会和xml文件名保持一致,不会随war包版本号变化。
方案3:修改server.xml全局配置(适合多应用统一管理场景)
也可以直接修改Tomcat核心配置文件conf/server.xml,在<Host>节点下添加Context规则:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- 新增Context配置,path为空代表根路径,docBase填webapps下的war包名称(无需.war后缀) --> <Context path="" docBase="myproject-1.0.0-SNAPSHOT" reloadable="true" /> <!-- 其余Host节点原有配置 --> </Host>
该方案需要注意如果开启了autoDeploy,可能会出现重复部署的问题,更适合固定部署规则的生产环境使用。
内容的提问来源于stack exchange,提问作者Toni26
相关产品推荐
相关产品推荐

