在 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 生態的必經之路。