Jetty 12热部署失效求助:升级后更新部署XML无法自动重部署
解决Jetty 12 EE10模块下部署XML修改后热部署失效的问题
针对你遇到的Jetty 12中修改部署XML后无法自动热部署的问题,可按以下步骤排查和修复:
1. 修正部署XML的DOCTYPE声明
你当前使用的是Jetty 10版本的DTD,与Jetty 12 EE10模块不兼容,会导致配置解析异常。将部署XML的DOCTYPE替换为Jetty 12对应版本:
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_12_0.dtd">
2. 修复ee10-deploy.xml中的scanInterval配置
你当前的scanInterval配置存在语法错误,同时嵌套了Property标签和硬编码值,导致扫描间隔未正确生效。二选一修改为:
- 使用属性配置(推荐,支持通过系统变量覆盖):
<Set name="scanInterval"><Property name="jetty.deploy.scanInterval" default="1"/></Set> - 直接设置固定值:
<Set name="scanInterval">1</Set>
3. 确保DeploymentManager监听正确的部署目录
检查ee10-deploy.xml中是否正确配置了DeploymentManager的监控目录,确保指向你的部署XML所在路径/opt/jetty/my_base/webapps:
<Call name="addAppProvider"> <Arg> <New class="org.eclipse.jetty.deploy.providers.WebAppProvider"> <Set name="monitoredDirName"><Property name="jetty.base" default="."/>/webapps</Set> <!-- 其他原有配置 --> </New> </Arg> </Call>
4. 配置自动重部署策略
Jetty 12默认可能不会自动重部署已存在的WebAppContext,需在ee10-deploy.xml的WebAppProvider配置中添加以下参数,允许修改部署XML时触发先卸载再重新部署:
<Set name="redeploy">true</Set> <Set name="undeployOldVersions">true</Set>
5. 验证Spring Boot应用打包方式
确保你的Spring Boot 3.0应用是标准WAR包(而非可执行JAR),且未禁用Jetty的WebAppContext重部署支持。若使用spring-boot-devtools,需注意其热部署与Jetty容器级热部署的兼容性,生产环境建议关闭devtools。
6. 开启详细日志排查
将Jetty日志级别调整为DEBUG,重点查看org.eclipse.jetty.deploy和org.eclipse.jetty.ee10.webapp包的日志,确认:
- 扫描器是否检测到部署XML的修改
- DeploymentManager是否触发了卸载和重新部署操作
- WebAppContext是否成功重启
完成以上配置后,修改部署XML并保存,Jetty应能在扫描间隔内自动触发应用重部署。
内容的提问来源于stack exchange,提问作者Mark Griffiths
相关产品推荐
相关产品推荐

