Java EE与Jakarta EE命名空间区别
在 Java 生态中,javax
和 jakarta
代表了 企业级 Java 规范(Java EE/Jakarta EE)的命名空间演进,核心区别在于归属权和管理组织的变更。以下是详细对比:
1. 历史背景
-
javax
:
源自 Java EE(Java Enterprise Edition),由 Sun Microsystems(后被 Oracle 收购) 定义。包路径如javax.servlet.*
、javax.persistence.*
等,是 2019 年之前 的标准命名空间。 -
jakarta
:
2017 年,Oracle 将 Java EE 移交给 Eclipse 基金会。因商标限制,基金会将其重命名为 Jakarta EE。从 Jakarta EE 9(2020 年发布) 开始,所有规范包名改为jakarta.*
(例如jakarta.servlet.*
)。
2. 变更原因
-
法律与商标问题:
Oracle 禁止 Eclipse 基金会继续使用javax
包名和 "Java" 品牌,迫使命名空间迁移。 -
独立发展:
Jakarta EE 需要摆脱 Oracle 的控制,以开放模式推动创新(如支持微服务、云原生)。
3. 技术影响
维度 | javax | jakarta |
---|---|---|
兼容性 | 仅支持 Java EE 8 及更早版本 | Jakarta EE 9+ 的强制要求 |
包路径示例 | javax.servlet.HttpServlet | jakarta.servlet.HttpServlet |
迁移成本 | 旧项目无需改动 | 旧项目升级需全局替换包名(破坏性变更) |
应用服务器 | Tomcat 9, WildFly 20(Java EE 8) | Tomcat 10+, WildFly 27+(Jakarta EE 9+) |
📌 注意:Jakarta EE 9 是首个不兼容旧版的版本,必须修改代码中的
javax
→jakarta
。
4. 如何迁移?
-
手动替换:
修改源码中的导入路径(例如javax.servlet
→jakarta.servlet
)。 -
自动化工具:
使用 Eclipse 基金会提供的 Eclipse Transformer 工具自动转换。 -
依赖调整:
更新 Maven/Gradle 依赖(例如javax:javaee-api
→jakarta.platform:jakarta.jakartaee-api
)。
5. 现状与未来
-
并行存在:
老项目仍用javax
(如银行系统),新项目必须用jakarta
(Jakarta EE 9+)。 -
规范演进:
Jakarta EE 10+ 新增特性(如 CDI Lite、异步 REST)仅通过jakarta.*
提供。 -
框架支持:
Spring 6 / Spring Boot 3+ 已全面转向 Jakarta EE 9+(弃用javax
)。
总结
关键点 | javax | jakarta |
---|---|---|
归属 | Oracle / Java EE | Eclipse 基金会 / Jakarta EE |
时代 | 旧标准(≤2019) | 新标准(≥2020) |
定位 | 历史技术栈 | 未来企业级 Java 的唯一方向 |
开发建议 | 旧系统维护 | 所有新项目必须使用 |
💡 简单来说:
javax
是过去,jakarta
是未来。升级到 Jakarta EE 是拥抱云原生和现代 Java 生态的必经之路。