简体   繁体   English

Java Web应用程序无法使用Jersey 2.26在Tomcat 8.5或9上启动

[英]Java web application does not start on Tomcat 8.5 or 9 using Jersey 2.26

I'm trying to deploy a simple Java (1.8) web application to Tomcat 9 (also tried on 8.5) using Jersey 2.26 built using Maven. 我正在尝试使用使用Maven构建的Jersey 2.26将简单的Java(1.8)Web应用程序部署到Tomcat 9(也在8.5上尝试过)。 I do not see any errors while building but deploying to Tomcat, the application does not start. 在构建但部署到Tomcat时,我没有看到任何错误,该应用程序无法启动。

在此处输入图片说明

I was referring to the options as listed here https://jersey.github.io/documentation/latest/deployment.html#deployment.servlet.3 我指的是这里列出的选项https://jersey.github.io/documentation/latest/deployment.html#deployment.servlet.3

Errors in Tomcat logs/catalina.out Tomcat logs / 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 的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 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>

Servlet class Servlet类

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

What am i missing? 我想念什么?

Looks like a missing jar. 看起来像一个缺少的罐子。 Actually the stacktrace message is pretty clear on the fact that javax/ws/rs/core/Application cannot be found. 实际上,在javax/ws/rs/core/Application的情况下,stacktrace消息非常清楚。

Add this dependency to your pom.xml clean and rebuild the project and I suppose you should be OK. 将此依赖项添加到pom.xml clean中,然后重新生成项目,我想您应该可以。

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

Like @Aris_Kortex mentioned the issue was with missing 就像@Aris_Kortex提到的那样,问题一直缺失

The solution was to remove <scope>provided</scope> from the maven dependency in pom.xml 解决方案是从pom.xml中的maven依赖项中删除<scope>provided</scope>

The dependency in my pom.xml before 我之前的pom.xml中的依赖项

<!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
<dependency>
  <groupId>javax.ws.rs</groupId>
  <artifactId>javax.ws.rs-api</artifactId>
  <version>2.1</version>
  <scope>provided</scope>
</dependency>

Corrected dependency 纠正依赖性

<!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
<dependency>
  <groupId>javax.ws.rs</groupId>
  <artifactId>javax.ws.rs-api</artifactId>
  <version>2.1</version>
</dependency>

Tomcat does not provide the jar and has to explicitly added by the application. Tomcat不提供jar,必须由应用程序显式添加。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM