Jetty 12如何避免启动时重新解压WAR覆盖work目录修改?
在Jetty 12中保留work目录修改的方法
Jetty 12默认重启时会重新解压WAR包覆盖work目录的修改,核心原因是ee10-deploy模块的WebAppProvider默认启用了overrideExtract=true参数,而Jetty 9.x中该参数默认值为false。要阻止覆盖行为,只需调整部署配置:
步骤1:修改部署配置文件
找到Jetty base目录下的etc/jetty-ee10-deploy.xml文件(该文件由ee10-deploy模块自动引入),定位到WebAppProvider的配置节点,添加或修改overrideExtract参数:
<New id="webappprovider" class="org.eclipse.jetty.ee10.deploy.providers.WebAppProvider"> <!-- 保留原有配置项 --> <Set name="monitoredDirName"><Property name="jetty.base" default="." />/webapps</Set> <Set name="defaultsDescriptor"><Property name="jetty.base" default="." />/etc/jetty-ee10-webdefault.xml</Set> <!-- 添加以下配置,禁用覆盖解压行为 --> <Set name="overrideExtract">false</Set> </New>
overrideExtract=false的作用是:当work目录中已存在WAR的解压内容时,Jetty不会用WAR包内的文件覆盖已有修改。
步骤2:验证效果
修改配置后重启Jetty,work目录中已修改的jar或class文件将不会被WAR包重新覆盖。如果后续需要更新WAR包内容,只需删除work目录中对应webapp的解压文件夹,Jetty会自动重新解压最新的WAR包。
额外说明
- 若需完全禁用WAR解压(直接从WAR文件运行),可设置
<Set name="extractWars">false</Set>,但此方式无法生成work目录的解压文件,也就无法修改其中内容。 - 确保
work模块已正确启用(你已添加该模块),Jetty会将WAR解压到${JETTY_BASE}/work目录下对应webapp的路径中。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

