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

Tomcat Jersey部署Ubuntu服务器报NoSuchMethodError求助

解决Tomcat部署Jersey 2时出现的NoSuchMethodError问题

这个javax.ws.rs.core.Application.getProperties()的NoSuchMethodError我之前踩过一模一样的坑,核心原因就是JAX-RS API版本和Jersey 2.x不兼容,或者服务器环境里存在冲突的依赖jar。下面给你一步步的解决思路:

核心问题分析

getProperties()是JAX-RS 2.0规范才新增的方法,而你的报错说明当前类加载环境里加载的是JAX-RS 1.x版本的Application类,和依赖JAX-RS 2.x的Jersey 2.x不匹配。这种冲突通常来自两个地方:项目依赖的jar,或者Tomcat服务器自带的jar。

具体解决方案

1. 清理项目依赖,确保JAX-RS API版本正确

如果用Maven管理依赖,检查你的pom.xml,确保只引入JAX-RS 2.x的API,并且和Jersey版本匹配:

<!-- Jersey核心依赖 -->
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>2.30.1</version> <!-- 替换成你实际用的Jersey版本 -->
</dependency>
<!-- JAX-RS 2.x API,和Jersey版本兼容 -->
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1.1</version>
    <!-- 注意:如果Tomcat本身不自带JAX-RS API,就去掉<scope>provided</scope>;如果服务器有预装,加上避免冲突 -->
    <scope>provided</scope>
</dependency>

如果是手动导入jar包,务必删除项目WEB-INF/lib里所有JAX-RS 1.x相关的jar(比如jsr311-api-xxx.jar),只保留javax.ws.rs-api-xxx.jar和Jersey 2.x的jar。

2. 检查Tomcat服务器的lib目录,移除冲突jar

Ubuntu上的Tomcat有时候会通过系统包预装一些额外的JAX-RS相关库,比如jaxrs-api.jar或者其他第三方JAX-RS实现的jar。你需要:

  • 进入Tomcat的lib目录(通常是/var/lib/tomcat9/lib)
  • 搜索所有包含jaxrs或javax.ws.rs的jar文件
  • 如果发现不是你项目里引入的Jersey相关jar,直接删除它们,避免类加载冲突

3. 替换Jhades,用更可靠的方式检查依赖冲突

Jhades对JDK 12的模块化类加载器支持不好,所以检测结果不可信。你可以换用这些方式:

  • 如果用Maven,执行命令:mvn dependency:tree -Dverbose,然后在输出里搜索javax.ws.rs,看是否有多个版本的依赖被引入
  • 直接打开项目打包后的war包,查看WEB-INF/lib目录,手动检查是否有重复或版本不兼容的JAX-RS相关jar

4. 修正web.xml里的小错误

你的web.xml里servlet名字打错了:jersey-serlvet应该是jersey-servlet(少了一个字母v)。虽然这不是当前500错误的直接原因,但纠正后可以避免后续可能出现的匹配问题:

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <!-- 其他配置不变 -->
</servlet>
<servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

验证步骤

  1. 重新打包项目,确保WEB-INF/lib里只有正确版本的Jersey和JAX-RS API jar
  2. 清空Tomcat的work和temp目录,避免缓存旧类
  3. 部署新的war包到Ubuntu的Tomcat,启动服务器
  4. 访问http://your-server-ip:8080/your-app-name/rest/hello,如果返回Hello Jersey就说明问题解决了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:19:47