Tomcat 在 Eclipse 中不再启动 servlet:迁移 Jersey 2.32 -> 3.0.1

Tomcat in Eclipse does not start servlet anymore: migrating Jersey 2.32 -> 3.0.1

我知道有很多关于这个主题的老问题:1, , 3

但我在我的非常简单的 servlet 中使用了不同的方法。

设置

  1. Tomcat 9
  2. 用于干净构建和管理依赖项的 Maven
  3. 泽西
  4. 日食 2021-09 (4.21.0)

我没有使用 web.xml, like this:

4.7.2.1. Descriptor-less deployment

There are multiple deployment options in the Servlet 3.0 container for a JAX-RS application defined by implementing a custom Application subclass. For simple deployments, no web.xml is necessary at all. Instead, an @ApplicationPath annotation can be used to annotate the custom Application subclass and define the base application URI for all JAX-RS resources configured in the application:

那里的例子

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

我已将 Jersey 从 2.32 更新为 3.0.1,所有依赖项都已下载,当我 [=96] 时没有编译错误=] mvn clean package.

当我在 Eclipse 中 运行 Tomcat 服务器时,我的第二个 servlet 启动了,但是 Jersey 3-one 出现了问题。令人沮丧的是,绝对没有错误。

更新

我已经更改了工具集并开始

也许我遗漏了一些愚蠢的东西(在我的依赖项中),但是由于除了 switch to 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 3 而不是 球衣 2.32。我应该从哪里开始检查(除了 项目设置:Java 构建路径(见屏幕截图)和部署程序集 )?

例如,日志调试显示:

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.

Jersey 3.0 是 Jakarta RESTful Web Services 3.0 的一个实现,它是 Jakarta EE 9 的一部分。

这是第一个版本,它使用新的 jakarta.* 包命名空间而不是旧的命名空间 javax.*。因此,Jersey 3.0 仅适用于其他 Jakarta EE 9 技术,并且与 Jakarta EE 8 规范不兼容。

如果您想使用 Jersey 3.0,您需要升级到 Tomcat10。