Jetty Servlet运行异常:main类启动报webAppDir为空错误
排查步骤与解决方法
1. 检查Main类的Jetty配置代码
报错核心是webAppDir为null——Maven的jetty:run插件会自动读取pom.xml里的默认配置(比如默认指向src/main/webapp),但自定义Main启动类需要手动指定Web应用根目录。
对照以下标准配置,检查你的代码:
public class JettyServerMain { public static void main(String[] args) throws Exception { Server server = new Server(8080); WebAppContext webAppContext = new WebAppContext(); // 关键:指定webapp目录路径,对应Maven默认结构 webAppContext.setResourceBase("src/main/webapp"); webAppContext.setContextPath("/"); server.setHandler(webAppContext); server.start(); server.join(); } }
重点确认是否调用了setResourceBase,且路径和你的项目实际结构匹配(如果webapp目录不在默认位置,要改成对应路径)。
2. 核对项目结构
再确认你的项目是否符合Maven Web项目的标准结构:
- 项目根目录
- src
- main
- java(业务代码)
- resources(配置文件)
- webapp(Web应用根目录,必须包含WEB-INF文件夹)
- main
- pom.xml
如果webapp目录位置错误、名称拼写错误(比如写成webapps),会导致Main类找不到路径,进而触发webAppDir为null的报错。
- src
3. 检查IntelliJ运行配置
在IntelliJ中运行Main类时,确保**工作目录(Working directory)**是项目根目录:
- 打开Run/Debug Configurations
- 找到你的Main类运行配置
- 查看Working directory字段,确认是项目根路径(比如
/Users/xxx/your-project),而非子目录
如果工作目录不对,相对路径src/main/webapp会无法识别,导致webAppDir为空。
4. 用绝对路径临时验证
如果以上步骤无效,可以先改用绝对路径测试,确认是否是路径问题:
// 替换成你本地项目webapp目录的绝对路径 webAppContext.setResourceBase("/Users/xxx/your-project/src/main/webapp");
如果这样能正常启动,说明是相对路径配置问题,回到步骤3调整工作目录即可。
内容的提问来源于stack exchange,提问作者bpr98
相关产品推荐
相关产品推荐

