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

Tomcat10迁移后REST应用加载未启动,ApplicationConfig未执行

解决Jakarta EE 21 + Tomcat 10迁移后REST服务未启动(ApplicationConfig.getClasses()未调用)的问题
  • 检查命名空间与导入类
    确保ApplicationConfig继承的是jakarta.ws.rs.core.Application,而非旧的javax.ws.rs.core.Application。同时所有REST相关注解(@Path、@GET、@POST等)都要从jakarta.ws.rs包导入,NetBeans自动迁移可能存在遗漏,手动核对每个REST类的导入语句。

  • 补充Tomcat 10的REST依赖
    Tomcat 10不内置Jakarta REST(JAX-RS)实现,必须手动添加依赖:

    • 若使用Maven,在pom.xml中加入:
      <!-- Jakarta REST API -->
      <dependency>
          <groupId>jakarta.ws.rs</groupId>
          <artifactId>jakarta.ws.rs-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
      </dependency>
      <!-- Jersey 3.x 实现(也可替换为RESTEasy等其他实现) -->
      <dependency>
          <groupId>org.glassfish.jersey.containers</groupId>
          <artifactId>jersey-container-servlet</artifactId>
          <version>3.1.5</version>
      </dependency>
      
    • 若为Ant项目,需将对应Jakarta REST的jar包放入WEB-INF/lib,同时删除所有遗留的javax.ws.rs相关jar包。
  • 验证ApplicationConfig的注解与可见性

    • 确保ApplicationConfig是public类,且标注了@jakarta.ws.rs.ApplicationPath注解(比如@ApplicationPath("/api")),Tomcat依赖该注解识别REST应用入口。
    • 确认getClasses()方法为public修饰,返回的集合中完整包含所有REST资源类,无类名拼写错误或遗漏。
  • 检查web.xml配置(若存在)
    若项目使用web.xml配置REST服务,需将servlet类替换为Jakarta适配版本(比如Jersey 3.x的org.glassfish.jersey.servlet.ServletContainer),同时确认servlet-mapping的url-pattern与@ApplicationPath配置一致,避免冲突。

  • 清理类加载冲突

    • 检查WEB-INF/lib下是否存在重复或冲突的jar包(如同时包含javax和jakarta版本的REST相关jar),直接删除冗余包。
    • 清空Tomcat的work目录,重新部署应用,避免旧编译缓存干扰类加载。
  • 开启调试日志排查
    修改Tomcatconf/logging.properties,将以下日志级别设为FINE:

    jakarta.ws.rs.level = FINE
    org.apache.catalina.core.level = FINE
    

    重启Tomcat后查看日志,可获取REST应用初始化的详细过程,定位未扫描到ApplicationConfig的具体原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:42:09