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

Spring MVC多模块应用在Eclipse Tomcat正常,外部Tomcat启动后失效

解决Spring MVC多模块应用外部Tomcat下Jersey资源扫描停滞问题

针对你遇到的外部Tomcat启动后Jersey扫描资源停滞的问题,以下是具体排查和解决步骤:

1. 检查WEB-INF/lib依赖完整性与版本一致性

  • 确保WEB-INF/lib下包含所有Jersey核心依赖包,且版本统一:
    • jersey-core.jar
    • jersey-server.jar
    • jersey-servlet.jar
    • jersey-spring.jar(若与Spring集成)
    • javax.ws.rs-api.jar(版本需与Jersey兼容,比如Jersey 1.x对应jax-rs 1.1)
  • 删除冲突的重复依赖,比如同时存在不同版本的javax.ws.rs-api或Jersey相关包。

2. 验证多模块打包的完整性

  • 解压部署的war包,检查WEB-INF/classes目录下是否存在in.wm包及其下的资源类(标注@Path的类)和提供者类。
  • 若使用Maven多模块,确保依赖模块的<scope>为compile,且打包时已将依赖模块的class文件或jar包打入主war包中。例如:
    <dependency>
        <groupId>your.group.id</groupId>
        <artifactId>dependency-module</artifactId>
        <version>your.version</version>
        <scope>compile</scope>
    </dependency>
    

3. 调整Tomcat类加载器配置

  • 确保Jersey相关jar仅放置在应用的WEB-INF/lib目录,不要放在Tomcat的lib目录下,避免Tomcat自带的jax-rs类与应用依赖冲突。
  • 若仍有类加载问题,修改Tomcat的conf/catalina.properties,调整类加载顺序,让web应用优先加载自身lib下的jar:
    # 确保webapp.loader优先加载WEB-INF/lib
    webapp.loader=${catalina.base}/webapps/${app.name}/WEB-INF/lib/*.jar
    

4. 核对Jersey扫描配置

  • 检查web.xml中的Jersey Servlet初始化参数,确认扫描包配置正确:
    <servlet>
        <servlet-name>Jersey Servlet</servlet-name>
        <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>in.wm</param-value>
        </init-param>
        <!-- 若涉及JSON序列化,添加此参数 -->
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
  • 若使用Java注解配置Jersey,确保配置类正确指定扫描包:
    @ApplicationPath("/api")
    public class JerseyConfig extends ResourceConfig {
        public JerseyConfig() {
            packages("in.wm");
            // 若有JSON相关配置,添加对应Feature
            register(JacksonFeature.class);
        }
    }
    

5. 利用日志定位具体异常

  • 查看localhost.log中的堆栈跟踪,定位停滞的根本原因:
    • 若为ClassNotFoundException,对应补充缺失的依赖jar;
    • 若为NoClassDefFoundError,排查依赖冲突或类加载顺序问题。
  • 调高Jersey日志级别,获取更详细的扫描过程:修改Tomcat的conf/logging.properties,添加:
    com.sun.jersey.level = FINE
    com.sun.jersey.handlers = java.util.logging.ConsoleHandler
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:02:36