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

Ubuntu服务器Tomcat9报com.sun.ws.rs.ext.RuntimeDelegateImpl类找不到

问题根源

该异常是类加载优先级冲突导致的:出问题的Ubuntu服务器上的Tomcat公共类路径中存在JAX-RS 1.x版本的API包(如jsr311-api.jar)或Jersey 1.x的核心包,其内置的SPI配置默认指向com.sun.ws.rs.ext.RuntimeDelegateImpl实现类,且Tomcat默认的父类加载优先机制会优先加载公共路径下的旧版本类,覆盖你应用中打包的Jersey 2.x的对应配置。

解决方案

按优先级从高到低尝试以下操作:

  • 第一步:清理冲突的旧版本Jar包
    执行以下命令排查Tomcat全局路径和应用路径下的冲突包:
    find $TOMCAT_HOME -name "*.jar" | grep -E "(jsr311|jersey-core-1\.|jax-rs.*1\.)"
    
    如果在Tomcat/lib、Tomcat/shared/lib等全局路径下找到上述旧包,直接删除即可;如果是在应用的WEB-INF/lib下存在,通过maven排除冲突依赖:
    <exclusion>
        <groupId>javax.ws.rs</groupId>
        <artifactId>jsr311-api</artifactId>
    </exclusion>
    
  • 第二步:配置应用优先加载自身依赖
    在应用的META-INF/context.xml中添加以下配置,关闭Tomcat默认的父类加载优先规则:
    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
        <Loader delegate="false"/>
    </Context>
    
  • 第三步:兜底强制指定实现类
    在初始化Jersey客户端的代码最前面添加一行系统属性配置,强制指定RuntimeDelegate的实现类,优先级高于SPI配置:
    System.setProperty("javax.ws.rs.ext.RuntimeDelegate", "org.glassfish.jersey.internal.RuntimeDelegateImpl");
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:45:04