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

Eclipse中Tomcat升级Jersey 2.32至3.0.1后Servlet无报错无法启动

我知道该主题已有不少历史相关问题:1、2、3,但我的简易Servlet采用了不同的实现方案。

环境配置

  • Tomcat 9
  • Maven用于执行清理构建与依赖管理
  • Jersey
  • Eclipse 2021-09 (4.21.0)

我没有使用web.xml,而是参考官方文档的方式:

4.7.2.1. 无描述符部署
Servlet 3.0容器中,通过自定义Application子类实现的JAX-RS应用支持多种部署方式。简单部署场景完全不需要web.xml,可通过在自定义Application子类上添加@ApplicationPath注解,为应用中配置的所有JAX-RS资源定义基础访问URI:

文档示例如下

@ApplicationPath("resources")
public class MyApplication extends ResourceConfig {
    public MyApplication() {
        packages("org.foo.rest;org.bar.rest");
    }
}

我已将Jersey从2.32版本升级到3.0.1版本,所有依赖均已下载,执行mvn clean package没有编译错误。

当我在Eclipse中运行Tomcat服务器时,我的另一个Servlet可以正常启动,但基于Jersey 3的Servlet启动异常,令人困扰的是完全没有任何错误日志输出。

更新

我已调整技术栈如下:

  • Tomcat 10
  • 改用*jakarta.命名空间替代javax.*命名空间
  • 使用<artifactId>jakarta.servlet-api</artifactId>

我可能在依赖配置中遗漏了某个细节,但目前除了“切换到Jakarta”之外没有其他迁移文档参考,只能反复试错。

我的相关依赖列表如下:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-web-api</artifactId>
    <version>9.0.0</version>
</dependency>
<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>5.0.0</version>
</dependency>

原有问题

该问题可能是maven-eclipse-tomcat链路的适配问题,也可能和从Jersey 2.32切换到Jersey 3有关。除了“项目设置:Java构建路径(见截图)和部署程序集”之外,我应该从哪些方向开始排查?

Build Path

日志调试信息示例如下:

DEBUG StatusLogger Starting LoggerContext[name=/sdp-api] from configuration at null
DEBUG StatusLogger Starting LoggerContext[name=/sdp-api, org.apache.logging.log4j.core.LoggerContext@72288480] with configuration XmlConfiguration[location=/path/to/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sdp-api/WEB-INF/classes/log4j2.xml]...
DEBUG StatusLogger Shutdown hook enabled. Registering a new one.
DEBUG StatusLogger Apache Log4j Core 2.14.1 initializing configuration XmlConfiguration[location=/path/to/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sdp-api/WEB-INF/classes/log4j2.xml]
DEBUG StatusLogger Installed 1 script engine
Warning: Nashorn engine is planned to be removed from a future JDK release
DEBUG StatusLogger Oracle Nashorn version: 11.0.11, language: ECMAScript, threading: Not Thread Safe, compile: true, names: [nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript], factory class: jdk.nashorn.api.scripting.NashornScriptEngineFactory
DEBUG StatusLogger PluginManager 'Core' found 123 plugins
DEBUG StatusLogger PluginManager 'Level' found 0 plugins
DEBUG StatusLogger PluginManager 'Lookup' found 17 plugins
DEBUG StatusLogger Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
TRACE StatusLogger TypeConverterRegistry initializing.
DEBUG StatusLogger PluginManager 'TypeConverter' found 26 plugins
DEBUG StatusLogger PatternLayout$Builder(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n", PatternSelector=null, Configuration(/path/to/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sdp-api/WEB-INF/classes/log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
DEBUG StatusLogger PluginManager 'Converter' found 44 plugins
DEBUG StatusLogger Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender].
DEBUG StatusLogger ConsoleAppender$Builder(target="SYSTEM_OUT", follow="null", direct="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n), name="Console", Configuration(/path/to/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sdp-api/WEB-INF/classes/log4j2.xml), Filter=null, ={})
DEBUG StatusLogger Starting OutputStreamManager SYSTEM_OUT.false.false
DEBUG StatusLogger Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin].
DEBUG StatusLogger createAppenders(={Console})
DEBUG StatusLogger Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
DEBUG StatusLogger createAppenderRef(ref="Console", level="null", Filter=null)
DEBUG StatusLogger Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger].
DEBUG StatusLogger createLogger(additivity="null", level="DEBUG", includeLocation="null", ={Console}, ={}, Configuration(/path/to/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sdp-api/WEB-INF/classes/log4j2.xml), Filter=null)
DEBUG StatusLogger Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin].
DEBUG StatusLogger createLoggers(={root})
DEBUG StatusLogger Configuration XmlConfiguration[location=/path/to/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sdp-api/WEB-INF/classes/log4j2.xml] initialized
DEBUG StatusLogger Starting configuration XmlConfiguration[location=/path/to/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sdp-api/WEB-INF/classes/log4j2.xml]
DEBUG StatusLogger Started configuration XmlConfiguration[location=/path/to/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sdp-api/WEB-INF/classes/log4j2.xml] OK.
TRACE StatusLogger Stopping org.apache.logging.log4j.core.config.DefaultConfiguration@67b3960b...
TRACE StatusLogger DefaultConfiguration notified 1 ReliabilityStrategies that config will be stopped.
TRACE StatusLogger DefaultConfiguration stopping root LoggerConfig.
TRACE StatusLogger DefaultConfiguration notifying ReliabilityStrategies that appenders will be stopped.
TRACE StatusLogger DefaultConfiguration stopping remaining Appenders.
DEBUG StatusLogger Shutting down OutputStreamManager SYSTEM_OUT.false.false-1
DEBUG StatusLogger OutputStream closed
DEBUG StatusLogger Shut down OutputStreamManager SYSTEM_OUT.false.false-1, all resources released: true
DEBUG StatusLogger Appender DefaultConsole-1 stopped with status true
TRACE StatusLogger DefaultConfiguration stopped 1 remaining Appenders.
TRACE StatusLogger DefaultConfiguration cleaning Appenders from 1 LoggerConfigs.
DEBUG StatusLogger Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@67b3960b OK
TRACE StatusLogger Reregistering MBeans after reconfigure. Selector=org.apache.logging.log4j.core.selector.ClassLoaderContextSelector@42805abe
TRACE StatusLogger Reregistering context (1/1): '/sdp-api' org.apache.logging.log4j.core.LoggerContext@72288480
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=/sdp-api'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=/sdp-api,component=StatusLogger'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=/sdp-api,component=ContextSelector'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=/sdp-api,component=Loggers,name=*'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=/sdp-api,component=Appenders,name=*'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=/sdp-api,component=AsyncAppenders,name=*'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=/sdp-api,component=AsyncLoggerRingBuffer'
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=/sdp-api,component=Loggers,name=*,subtype=RingBuffer'
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=/sdp-api
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=/sdp-api,component=StatusLogger
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=/sdp-api,component=ContextSelector
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=/sdp-api,component=Loggers,name=
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=/sdp-api,component=Appenders,name=Console
TRACE StatusLogger Using default SystemClock for timestamps.
DEBUG StatusLogger org.apache.logging.log4j.core.util.SystemClock supports precise timestamps.
TRACE StatusLogger Using DummyNanoClock for nanosecond timestamps.
DEBUG StatusLogger LoggerContext[name=/sdp-api, org.apache.logging.log4j.core.LoggerContext@72288480] started OK with configuration XmlConfiguration[location=/path/to/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sdp-api/WEB-INF/classes/log4j2.xml].
DEBUG StatusLogger Log4jServletContextListener ensuring that Log4j starts up properly.
DEBUG StatusLogger Log4jServletFilter initialized.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:57:03