网站改版意义王也天图片
在 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 生态的必经之路。
