You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

直接运行Jetty源码Main类启动Web应用 不使用start.jar方案

问题现象

直接执行Main类通过Jetty源码启动Web应用时,控制台输出如下报错:

ERROR : No enabled jetty modules found!
INFO  : ${jetty.home} = /Users/zhangsan/git_repo/servlet-container/jetty.project
INFO  : ${jetty.base} = /Users/zhangsan/git_repo/servlet-container/jetty.project
ERROR : Please create and/or configure a ${jetty.base} directory.

Usage: java -jar $JETTY_HOME/start.jar [options] [properties] [configs]
       java -jar $JETTY_HOME/start.jar --help  # for more information

报错核心为未找到已启用的Jetty模块,要求创建并配置${jetty.base}目录,需求为不通过start.jar方式完成Jetty Web应用启动。

问题根因

当前直接运行的是Jetty的org.eclipse.jetty.start.Main入口类,这个类本身就是start.jar的启动入口,设计逻辑面向命令行启动场景,会强制校验${jetty.base}下的模块启用配置,不适合直接编码/嵌入式启动场景。

可行解决方案

方案1:纯编码嵌入式启动(推荐,完全不依赖start.jar与模块配置)

这是最通用的无start.jar启动方式,全程手动组装Jetty核心组件,不会触发任何模块校验逻辑:

  • 不要直接运行Jetty源码内置的org.eclipse.jetty.start.Main类
  • 自行编写启动入口类,手动初始化Server、连接器、Web上下文,示例代码如下:
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public class JettyLauncher {
    public static void main(String[] args) throws Exception {
        // 初始化Server实例,指定监听端口
        Server server = new Server(8080);

        // 配置Web应用上下文
        WebAppContext webAppContext = new WebAppContext();
        // 指定Web资源根路径,替换为你项目的webapp目录实际路径
        webAppContext.setResourceBase("src/main/webapp");
        // 指定服务上下文路径
        webAppContext.setContextPath("/");
        // 可选:关闭内存映射文件,避免Windows环境下静态资源锁定问题
        webAppContext.setInitParameter(
                "org.eclipse.jetty.servlet.Default.useFileMappedBuffer",
                "false"
        );

        // 绑定Web上下文到服务实例
        server.setHandler(webAppContext);

        // 启动服务并阻塞等待请求
        server.start();
        server.join();
    }
}
  • 直接运行你编写的JettyLauncher类即可完成启动。

方案2:复用Jetty模块体系,跳过start.jar命令行启动

如果需要使用Jetty的官方模块扩展能力,又不想通过java -jar start.jar的方式启动,可以按如下步骤操作:

  • 新建独立目录作为自定义jetty.base,禁止直接使用Jetty源码根目录作为jetty.base,源码目录默认无模块启用配置,必然触发模块找不到的报错
  • 进入新建的jetty.base目录,执行一次初始化命令生成模块配置:
# 替换为你实际的jetty.base路径
cd /path/to/your/custom/jetty-base
# 按需添加你需要的模块,示例添加http、webapp、deploy三个基础模块
java -cp /path/to/jetty/compiled/classes org.eclipse.jetty.start.Main --add-to-start=http,webapp,deploy
  • 编写自定义启动类,提前指定系统属性后再初始化Server:
public class ModuleJettyLauncher {
    public static void main(String[] args) throws Exception {
        // 手动指定jetty.home与jetty.base路径
        System.setProperty("jetty.home", "/Users/zhangsan/git_repo/servlet-container/jetty.project");
        System.setProperty("jetty.base", "/path/to/your/custom/jetty-base");

        // 按业务需求初始化Server、配置Handler与模块
        Server server = new Server(8080);
        // 省略你的业务配置逻辑

        server.start();
        server.join();
    }
}
  • 运行自定义的ModuleJettyLauncher类即可。

内容的提问来源于stack exchange,提问作者huifer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 13:06:08