引入Jakarta EE 9.1.0依赖仍遇java.lang.NoSuchMethodError问题求助
排查Jersey依赖版本冲突
这个错误本质是类路径里存在不同版本的Jersey核心库,导致运行时加载的类没有目标方法。jakarta.jakartaee-api只是API规范,不包含具体实现,你需要确保项目中引入的Jersey实现版本和Jakarta EE 9.1兼容。
执行mvn dependency:tree(Maven项目)或查看Gradle依赖报告,找出所有org.glassfish.jersey相关的依赖,检查版本是否统一,尤其是jersey-common、jersey-server这类核心包,建议使用和Jakarta EE 9.1匹配的Jersey版本(比如3.1.5,这是兼容Jakarta EE 9的稳定版)。调整provided依赖的影响
你的jakarta.jakartaee-api设为provided,意味着运行时由容器提供该API。但如果容器本身的Jersey版本和你项目依赖的Jersey实现版本不匹配,也会引发冲突。
如果是独立运行(比如用Tomcat、Jetty),可以把jakarta.jakartaee-api的scope改为compile,或者明确引入兼容的Jersey实现依赖,覆盖容器提供的版本。强制统一Jersey依赖版本
在Maven的dependencyManagement中锁定Jersey相关依赖的版本,避免依赖传递带来的版本不一致:<dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey</groupId> <artifactId>jersey-bom</artifactId> <version>3.1.5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>这样所有Jersey子依赖都会使用指定的3.1.5版本,确保类的一致性。
清理构建缓存
有时候本地构建缓存里残留了旧版本的类文件,导致运行时加载错误。执行mvn clean install(Maven)或gradle clean build(Gradle)清理后重新构建。
内容的提问来源于stack exchange,提问作者vivek204

