You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus依赖javax而非Jakarta的技术原因及切换方法问询

关于Quarkus中javax与Jakarta命名空间的疑问解答

一、Quarkus仍依赖javax的技术原因

Quarkus早期基于Java EE生态构建,javax是当时Java EE标准的官方命名空间。Jakarta EE 9的核心变更就是将所有API的包名从javax.*迁移到jakarta.*,这是一次全量的包名替换操作,涉及框架内部核心代码、所有官方扩展、以及第三方生态的兼容性适配。

Quarkus作为面向生产的框架,必须兼顾现有用户的稳定性需求——大量企业项目和第三方库仍基于javax栈运行,直接切换到Jakarta会导致这些用户无法平滑升级。因此Quarkus采取了分阶段迁移策略:2.x版本同时兼容javax和Jakarta,3.x版本则全面切换到Jakarta命名空间,完成了生态的整体过渡。

二、文档与代码仓库不一致的原因

这种情况是因为Quarkus的文档和快速启动项目的更新节奏不完全同步。部分文档提前跟进了Jakarta的技术标准进行表述,但对应的快速启动代码可能仍保留javax版本以兼容更多低版本用户,或者处于版本分支的维护阶段。你可以查看Quarkus最新的3.x版本分支下的示例代码,大部分已经完成了Jakarta命名空间的切换。

三、切换到Jakarta命名空间的方法

1. 新项目直接使用Jakarta栈

直接创建Quarkus 3.x及以上版本的项目,默认就会采用Jakarta命名空间,所有核心API(如JPA、CDI、Servlet等)都使用jakarta.*包名。

2. 现有javax项目升级到Jakarta

可以通过以下步骤完成迁移:

  • 升级Quarkus版本到3.x及以上
  • 替换项目依赖:将所有javax.*相关的依赖替换为对应的jakarta.*依赖(例如javax.persistence:javax.persistence-api替换为jakarta.persistence:jakarta.persistence-api)
  • 批量替换代码中的包名:把所有import javax.xxx修改为import jakarta.xxx
  • 检查并更新扩展依赖:确保使用的Quarkus官方扩展或第三方扩展已经适配Jakarta(大部分官方扩展在3.x版本中已完成适配)

3. 处理第三方Jakarta库的冲突

如果在javax版本的Quarkus项目中引入了使用Jakarta命名空间的第三方库,会出现包冲突问题。最稳妥的解决方式是直接升级项目到Quarkus 3.x版本;如果暂时无法升级,尝试通过依赖排除规则移除项目中的javax相关依赖,强制使用Jakarta版本,但这种方式容易引发兼容性问题,不建议在生产环境使用。

内容的提问来源于stack exchange,提问作者JeanValjean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:27:14