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

迁移至Jersey 3.0.8时javax与jakarta依赖冲突问题求助

Jersey 3.0.8迁移(嵌入式Tomcat+Gradle)问题解决思路

核心原则:彻底切换到Jakarta EE生态,禁止混合javax/jakarta依赖

Jersey 3.x基于Jakarta EE 9+规范,必须完全抛弃javax命名空间的Servlet、JAX-RS等依赖,否则必然出现类加载冲突或上下文找不到的问题。


1. 调整嵌入式Tomcat依赖至Jakarta兼容版本

旧版Tomcat(9及以下)依赖javax.servlet,而Tomcat 10+才支持jakarta.servlet。你当前用了jakarta.servlet-api:6.0.0,需匹配Tomcat 10.1.x版本:

// 移除所有javax.servlet相关依赖,包括javax.servlet-api
// 引入Jakarta版嵌入式Tomcat
implementation("org.apache.tomcat.embed:tomcat-embed-core:10.1.10")
implementation("org.apache.tomcat.embed:tomcat-embed-webapp:10.1.10") // 若用到WebApp相关功能
implementation("org.apache.tomcat.embed:tomcat-embed-jasper:10.1.10") // 若用到JSP

2. 统一Jersey依赖为Jakarta版本

确保所有Jersey组件都是Jakarta适配版,避免残留javax版依赖:

// 替换旧的javax版Jersey依赖,比如jersey-container-servlet -> jersey-container-servlet-jakarta
implementation("org.glassfish.jersey.containers:jersey-container-servlet-jakarta:3.0.8")
implementation("org.glassfish.jersey.core:jersey-server:3.0.8")
implementation("org.glassfish.jersey.core:jersey-client:3.0.8")
// 若用到CDI/依赖注入,补充Jakarta Inject API
implementation("jakarta.inject:jakarta.inject-api:2.0.1")

3. 代码层面彻底替换命名空间

  • 除javax.imageio外,所有javax.servlet.*、javax.ws.rs.*、javax.inject.*等导入全部替换为jakarta.xxx
  • 检查配置类:确保继承jakarta.ws.rs.core.Application而非旧版javax.ws.rs.core.Application
  • 检查Servlet相关代码:比如ServletContext要改为jakarta.servlet.ServletContext,HttpServlet改为jakarta.servlet.http.HttpServlet等

4. 排查第三方依赖的javax残留

用Gradle命令查看依赖树,找出偷偷引入javax.servlet的第三方库:

./gradlew dependencies --configuration compileClasspath | grep javax.servlet

对这类库,要么替换为Jakarta兼容版本,要么通过exclude排除其javax依赖:

implementation("your-third-party-lib") {
    exclude group: 'javax.servlet', module: 'javax.servlet-api'
}

5. 清理缓存并验证构建

执行以下命令清理Gradle缓存,确保无旧依赖残留:

./gradlew clean build --refresh-dependencies

6. 解决jakarta.inject.Singleton上下文问题

若仍出现该异常,需确保Jersey配置中启用了依赖注入支持:

  • 在你的ResourceConfig实现类中,注册Jersey的DI相关提供者:
public class AppConfig extends ResourceConfig {
    public AppConfig() {
        packages("your.resource.package");
        // 注册DI支持
        register(org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory.class);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:40:22