Jersey项目ResourceConfig依赖异常:Tomcat运行时类找不到
问题分析与解决方案
这问题我之前也碰到过!核心原因其实是项目B的编译产物没有被正确打包到项目A的Tomcat部署包中——虽然Eclipse里构建路径配置好了,但部署时没把类复制过去,导致运行时JVM找不到com.project.b.SomeClassToRegister。下面给你几个针对性的排查和解决步骤:
1. 先确认Tomcat部署目录里有没有项目B的类
直接去你的Tomcat安装目录下的webapps/[你的项目A名称]/WEB-INF/classes或者WEB-INF/lib里查找,看看是否存在com/project/b/SomeClassToRegister.class这个文件。如果没有,就直接证明部署时没把项目B的类包含进去,这时候重点看Eclipse的部署配置。
2. 检查Eclipse的Deployment Assembly配置细节
右键项目A → 「Properties」→ 「Deployment Assembly」,找到项目B的那条条目:
- 确认「Source」列是项目B的编译输出目录(比如默认是
com.project.b/bin或者com.project.b/target/classes,取决于你的项目设置),别选成源码目录了 - 确认「Deploy Path」列是
WEB-INF/classes(如果是把项目B的类直接复制到项目A的classes目录);如果项目B是打包成jar的方式依赖,那Deploy Path应该是WEB-INF/lib,同时要确保项目B已经被正确导出为jar包
3. 手动编译项目B再重新部署
有时候Eclipse的自动编译会抽风,尤其是多项目依赖场景下:
- 右键项目B → 「Project」→ 「Build Project」,等待编译完成
- 右键项目A → 「Run As」→ 「Clean Tomcat Work Directory」
- 重新启动Tomcat部署项目A
4. 如果用了构建工具,检查依赖配置和同步
要是你的项目用Maven/Gradle管理:
- Maven:确认项目A的
pom.xml里已添加项目B的依赖,且<scope>是默认的compile(别设成provided或test,这俩会导致打包时不包含依赖)。执行mvn clean install重新构建后,右键项目A → 「Maven」→ 「Update Project」同步配置。 - Gradle:确认项目A的
build.gradle里依赖项目B的方式是implementation project(':com.project.b'),执行gradle clean build后同步Gradle项目。
5. 额外优化:去掉重复的类注册
你第30行已经用packages("com.project.b")扫描了整个包,如果SomeClassToRegister是Jersey会自动注册的类(比如带@Path的资源类、@Provider的提供者类),完全不需要手动调用register()方法。这不仅能避免类加载顺序的潜在问题,还能简化代码。
内容的提问来源于stack exchange,提问作者buzoherbert
相关产品推荐
相关产品推荐

