WAR包部署到webapps嵌套目录时该如何配置Jetty 9.4?
问题根因
- Jetty 9.4默认的部署扫描器仅扫描
$JETTY_BASE/webapps一级目录下的可部署资源(WAR包、解压的Web应用目录、XML上下文配置文件),不会递归扫描子目录,所以你放在嵌套的eyerep-data子目录下的WAR包没有被正确识别为Web应用,Jetty仅将该路径识别为静态资源目录,访问时就会返回文件列表,调用业务接口返回404。 - 你当前的
jetty-web.xml配置中war属性的路径指向的是$jetty.monitorDir/eyerep-data.war,即webapps根目录下的WAR包,和你实际存放的webapps/eyerep-data/eyerep-data.war路径不匹配,也是应用加载失败的原因之一。
解决方案
方案1:开启部署扫描器递归扫描(适合多嵌套目录部署场景)
- 找到
$JETTY_BASE/start.d/deploy.ini配置文件,若不存在则执行命令java -jar $JETTY_HOME/start.jar --add-to-start=deploy生成对应配置文件。 - 在
deploy.ini中添加/修改以下配置项:
jetty.deploy.scanDir = ${jetty.base}/webapps jetty.deploy.recursiveScan = true
开启后Jetty会自动扫描webapps目录下所有子目录的可部署资源。
3. 修正jetty-web.xml中的WAR包路径,匹配实际存放路径:
<Configure id="eyerep-data" class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/eyerep-data</Set> <Set name="war"><SystemProperty name="jetty.monitorDir" default="./webapps" />/eyerep-data/eyerep-data.war</Set> </Configure>
- 重启Jetty服务即可正常访问。
方案2:使用根目录上下文配置文件(更推荐,便于管理)
不需要开启递归扫描,直接在$JETTY_BASE/webapps根目录下新建名为eyerep-data.xml的上下文配置文件,内容和上述修正后的jetty-web.xml一致即可。Jetty会优先读取webapps根目录下的XML配置,按配置指定的路径加载对应WAR包。
校验方式
启动无报错后,若开启了Jetty管理控制台,可访问http://服务IP:10202/jetty查看已部署应用列表,确认/eyerep-data上下文已成功加载即可。
内容的提问来源于stack exchange,提问作者pbuchheit
相关产品推荐
相关产品推荐

