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

依赖未适配Jakarta的第三方库时,如何迁移至Spring Boot 3?

解决方案

1. 优先使用JAX-RS迁移桥接(推荐)

Spring Boot 3 基于 Jakarta EE 10,JAX-RS 3.0已迁移至jakarta.ws.rs包。针对依赖javax.ws.rs的第三方库,可通过桥接依赖将javax.ws.rs的调用转发到jakarta.ws.rs的实现:

  • Maven配置(pom.xml):
<!-- Jersey兼容层,处理javax到jakarta的类映射 -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>3.1.5</version>
</dependency>
<!-- 提供javax.ws.rs API的桥接声明 -->
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1.1</version>
    <scope>provided</scope>
</dependency>
  • Gradle配置:
implementation 'org.glassfish.jersey.core:jersey-common:3.1.5'
provided 'javax.ws.rs:javax.ws.rs-api:2.1.1'

该方案复用Spring Boot 3已有的Jakarta实现,避免引入两套独立的API实现。

2. 临时引入javax API依赖(应急可用)

若桥接方案不生效,可临时引入javax.ws.rs的API包,但需严格控制:

  • 仅引入API依赖(如javax.ws.rs:javax.ws.rs-api:2.1.1),不要引入完整的jersey-client实现,防止和Spring Boot 3的Jakarta版Jersey冲突
  • 项目代码必须严格区分jakarta.*和javax.*包,禁止混用

3. 等待第三方库适配(备选)

若项目进度允许,可关注jira-rest-java-client-core的版本更新,等待官方推出Jakarta兼容版本。但此方案存在适配时间不确定的风险,可能阻塞迁移进度。


关于类路径共存jakarta和javax的问题

  • 不同包名的API(javax.* vs jakarta.*)本身不会触发类冲突,JVM会将其视为完全独立的类。
  • 风险点在于实现类冲突:若同时引入javax.ws.rs和jakarta.ws.rs的实现库(如旧版Jersey和新版Jersey),可能出现NoClassDefFoundError、ClassCastException等类加载异常。
  • 因此,应尽量避免同时引入两套实现,优先采用桥接方案复用Jakarta的实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:57:44