
Jetty 12 彻底重构了模块架构,剥离了所有 Jakarta EE 相关功能(如 Servlet),转为“Core + Environment”分层设计;jetty-servlet 已不复存在,需改用对应 Jakarta EE 版本的环境模块(如 jetty-servlet-ee10)并声明正确的命名空间。
jetty 12 彻底重构了模块架构,剥离了所有 jakarta ee 相关功能(如 servlet),转为“core + environment”分层设计;`jetty-servlet` 已不复存在,需改用对应 jakarta ee 版本的环境模块(如 `jetty-servlet-ee10`)并声明正确的命名空间。
Jetty 12 是一次根本性架构演进:它不再将 Servlet、JSP、WebSocket 等 Jakarta EE 规范内建于核心模块中,而是将 Jetty 拆分为轻量级 Core 层(仅含 HTTP/HTTP/2/ALPN/IO 等底层能力)和可插拔的 Environment 层(按 Jakarta EE 版本组织,提供对应规范实现)。因此,传统意义上的 jetty-servlet(如 org.eclipse.jetty:jetty-servlet:12.0.0)在 Maven Central 中确实不存在——它已被语义化重命名为形如 jetty-servlet-ee10 的模块。
✅ 正确引入方式(Maven 示例)
根据你的应用目标 Jakarta EE 版本,选择对应 Environment:
| Jakarta EE | Servlet API | 命名空间 | 推荐 Maven 依赖(Jetty 12.0.0) |
|---|---|---|---|
| EE 10 | Servlet 6 | jakarta.servlet.* |
<artifactid>jetty-servlet-ee10</artifactid> |
| EE 9 | Servlet 5 | jakarta.servlet.* |
<artifactid>jetty-servlet-ee9</artifactid> |
| EE 8 | Servlet 4 | javax.servlet.* |
<artifactid>jetty-servlet-ee8</artifactid> |
例如,构建基于 Jakarta Servlet 6(EE 10)的 Web 应用:
<dependency><groupid>org.eclipse.jetty.ee10</groupid><artifactid>jetty-servlet-ee10</artifactid><version>12.0.0</version></dependency><!-- 注意:groupId 已变更为 org.eclipse.jetty.ee10 -->
⚠️ 关键变化:
- Group ID 不再是
org.eclipse.jetty,而是按 EE 版本区分:org.eclipse.jetty.ee8/org.eclipse.jetty.ee9/org.eclipse.jetty.ee10;- Artifact ID 后缀明确标识 EE 环境:
-ee8、-ee9、-ee10;- 包名严格遵循 Jakarta 命名空间:EE 9+ 必须使用
jakarta.servlet.*,EE 8 仍支持javax.servlet.*(但已废弃);- Core 模块(如
jetty-server,jetty-http)仍保留在org.eclipse.jetty下,但不含任何 Servlet 类型。
? 补充说明
- Jetty 12 的版本号回归标准语义化版本(
MAJOR.MINOR.PATCH),终结了此前沿用近30年的<servlet_version>.<jetty_major>.<minor></minor></jetty_major></servlet_version>混合命名(如11.0.20表示 Servlet 5 支持)。 - 多 Environment 共存成为可能:你可在同一 JVM 中同时加载
jetty-servlet-ee9和jetty-servlet-ee10,为灰度迁移或混合部署提供基础。 - 若需兼容旧
javax.servlet应用,可继续使用jetty-servlet-ee8,但建议新项目统一迁移到jakarta.servlet.*并选用ee10或更高环境。
官方迁移指南已明确列出全部坐标变更:Jetty 11 → 12 迁移文档。务必查阅该页的 "Maven Coordinates Changes" 表格以确认完整依赖映射。










