v
最新版本与兼容性:Jakarta EE 10/11 + Tomcat 10/11 怎么选
Jakarta EE Releases · Servlet Version Matrix · javax → jakarta
Java Web 的版本号比 Java 本体还乱——你看到的 javax.servlet 和 jakarta.servlet 之争,本质就是版本绑定关系。下面这张矩阵一次说清:Jakarta EE 版本、Servlet 版本、Tomcat 大版本,三者强绑定,不能乱搭。
| 规范版本 | 发布时间 | 包名 | 定位 |
|---|---|---|---|
| Jakarta EE 11 | 2024 | jakarta.* | 最新版。CDI 4.1、Servlet 6.1、JPA 3.2、Jakarta REST 3.1。要求 JDK 17+。 |
| Jakarta EE 10 | 2022 | jakarta.* | 当前稳定主力。CDI 4.0、Servlet 6.0、JSP 3.1、JPA 3.1。Tomcat 10.1 对应这个版本。 |
| Jakarta EE 9.1 | 2021 | jakarta.* | 第一次全面改包名,从 javax 迁到 jakarta。 |
| Java EE 8 | 2017 | javax.* | 最后一个 javax 版本。Tomcat 9 对应它。老项目、Spring Boot 2.x 用。 |
Servlet 容器版本矩阵:Tomcat / Jetty / WildFly
| 容器 | 对应 EE 版本 | Servlet 版本 | 用在哪 |
|---|---|---|---|
| Tomcat 11.x | Jakarta EE 11(Web Profile) | Servlet 6.1 | 最新,新项目尝鲜。要求 JDK 21+。 |
| Tomcat 10.1.x | Jakarta EE 10(Web Profile) | Servlet 6.0 | 本页基线。当前学习和生产最稳。要求 JDK 11+。 |
| Tomcat 9.x | Java EE 8 / Jakarta EE 8 | Servlet 4.0 | 老项目,包名是 javax.*。 |
| Jetty 12.x | Jakarta EE 10+ | Servlet 6.0+ | 轻量嵌入式,Spring Boot 内嵌可选。 |
| WildFly 33/34 | 完整 Jakarta EE 10/11 | Servlet 6.0/6.1 | Red Hat 出品,全功能 Java EE 容器(EJB、JPA、CDI 全家桶)。初学不用。 |
javax → jakarta 迁移史:为什么包名要改
论这段历史的来龙去脉
2017 年:Oracle 把 JavaEE 捐给 Eclipse 基金会,但"Java"是注册商标,不能随便用。2019 年改名 Jakarta EE。
关键一刀:Java EE 8(2017)是最后一个用 javax 包名的版本。从 Jakarta EE 9(2021) 起,所有 javax.servlet.*、javax.persistence.* 包名强制改成 jakarta.servlet.*、jakarta.persistence.*。
为什么是强制改而不是兼容:如果保留 javax 包名,就和 Oracle 自己维护的 javax EE 包冲突,两个 jar 里同名类互相覆盖。Eclipse 基金会干脆换个根包名,一刀两断。
| 你看到的包名 | 该用哪个容器 / 框架 |
|---|---|
javax.servlet.* | Tomcat 9、Spring Boot 2.x、Java EE 8 老项目。 |
jakarta.servlet.* | Tomcat 10+、Spring Boot 3.x、Jakarta EE 9+ 新项目。本页基线。 |
Spring Boot 版本绑定:别乱搭
| Spring Boot | JDK 要求 | 包名 | 内嵌 Tomcat |
|---|---|---|---|
| Spring Boot 3.x | JDK 17+ | jakarta.* | Tomcat 10.1 / 11 |
| Spring Boot 2.7.x | JDK 8+ | javax.* | Tomcat 9 |
混包名 = 编译报错
Tomcat 10 下写 import javax.servlet.http.*,编译直接找不到类。Tomcat 9 下写 import jakarta.servlet.*,一样找不到。包名和容器大版本强绑定,别照抄网上老教程。本页所有代码按 Tomcat 10.1 + Jakarta EE 10 写 jakarta.*。