首页 > 解决方案 > Java Web 应用程序无法在使用 Jersey 2.26 的 Tomcat 8.5 或 9 上启动

问题描述

我正在尝试使用使用 Maven 构建的 Jersey 2.26 将一个简单的 Java (1.8) Web 应用程序部署到 Tomcat 9(也在 8.5 上尝试过)。我在构建但部署到 Tomcat 时没有看到任何错误,应用程序无法启动。

在此处输入图像描述

我指的是此处列出的选项https://jersey.github.io/documentation/latest/deployment.html#deployment.servlet.3

Tomcat 日志/catalina.out 中的错误

17-Aug-2018 21:46:06.062 SEVERE [http-nio-8080-exec-39] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [/Users/konathal/Software/apache-tomcat-9.0.10/webapps/jaq-stack-webapp.war] java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [

Caused by: java.lang.NoClassDefFoundError: javax/ws/rs/core/Application at org.glassfish.jersey.servlet.init.JerseyServletContainerInitializer.addServletWithDefaultConfiguration(JerseyServletContainerInitializer.java:240)

pom.xml

 <dependency>
   <groupId>org.glassfish.jersey.containers</groupId>
   <artifactId>jersey-container-servlet</artifactId>
   <version>2.26</version>
 </dependency>
 <dependency>
   <groupId>org.glassfish.jersey.core</groupId>
   <artifactId>jersey-server</artifactId>
   <version>2.26</version>
 </dependency>
 <dependency>
   <groupId>org.glassfish.jersey.inject</groupId>
   <artifactId>jersey-hk2</artifactId>
   <version>2.26</version>
 </dependency>

web.xml

<servlet>
  <servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>
<servlet-mapping>
  <servlet-name>javax.ws.rs.core.Application</servlet-name>
  <url-pattern>/service/*</url-pattern>
</servlet-mapping>

小服务程序类

@Path("/dbservice")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MongoServlet {

我错过了什么?

标签: javarestjerseytomcat8tomcat9

解决方案


看起来像一个丢失的罐子。实际上,堆栈跟踪消息非常清楚地说明了javax/ws/rs/core/Application无法找到的事实。

将此依赖项添加到您的pom.xml清理并重建项目中,我想您应该没问题。

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1</version>
</dependency>

推荐阅读