Jersey错误java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer

时间:2018-03-12 14:07:30

标签: java eclipse maven tomcat jersey

我的Node.JS API(localhost)调用Tomcat服务器上的Jersey API(localhost)之前工作得非常好,但我不知道为什么它今天意外失败了。我已检查过上周以来所有文件都没有修改过。我试图获得http://localhost:8080/graybox/rest/analytic

它将失败并在eclipse控制台中显示这些消息。

SEVERE: Allocate exception for servlet [Jersey Web Application]
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:544)
    ...

我已经进行了很多调查,但我仍然无法找到解决问题的方法。以下是我以前尝试解决此问题的方法,该问题还附加了dev环境,web.xml和pom.xml。感谢。

  1. 安装maven(brew),m2eclipse(Eclipse安装新软件),m2e-wtp(Eclipse安装新软件)Eclipse安装新软件:Help - >安装新软件 - >将网址粘贴到"使用" - >选择全部,然后选择下一步并完成m2eclipse m2e-wtp
  2. Eclipse:导入 - >现有的Maven项目 - >选择" graybox"项目文件夹
  3. 在Eclipse中重建Maven全局索引:Detail
  4. 在Maven中添加依赖项以确保相同版本中的所有jersey依赖项,例如所有1.19版本jersey-server,jersey-bundle,jersey-core,jersey-json Reasons
  5. 清除Maven依赖项
    1. 项目 - >清洁 - >清洁
    2. 右键单击项目 - > Maven - >更新项目
    3. 右键单击项目 - >以 - >运行4(或5)Maven构建 - >目标:全新安装 - >申请 - >运行Detail
  6. 如果有多个Tomcat服务器正在运行,请删除不相关的Tomcat服务器,请确保在运行时选择正确的服务器:Window - >偏好 - >服务器 - >运行时环境 - >删除所有不相关的服务器
  7. 添加服务器Tomcat Detail在运行服务器之前,双击服务器 - >服务器位置:使用Tomcat安装... Detail
  8. 右键单击项目 - >属性 - >项目方面 - >选择:动态Web模块,Java,JavaScript,JAX-RS(REST Web服务) - >运行时 - >选择合适的服务器 - >申请 - >应用并选择
  9. 启动服务器 - >运行项目 - >浏览器http://localhost:8080/ - >显示Tomcat的欢迎页面
  10. 环境

    • Mac os x 10.13.2,x86_64
    • Eclipse Oxygen.2 Release(4.7.2)
    • 后端
      • Java jdk1.8.0_151-b12
      • Tomcat 8.5
      • Maven 3.5.2 默认语言环境:en_AU,平台编码:UTF-8
      • 泽西岛1.19
      • 节点8.9.4
      • NPM 5.6.0
      • Bower 1.8.2
      • Nodemon 1.14.11

    这是web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
        <display-name>Graybox</display-name>
        <servlet>
            <servlet-name>Jersey Web Application</servlet-name>
            <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Jersey Web Application</servlet-name>
            <url-pattern>/rest/*</url-pattern>
        </servlet-mapping>
    </web-app>
    

    这是pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>graybox</groupId>
      <artifactId>graybox</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
      <build>
        <finalName>graybox</finalName>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
              <source>1.8</source>
              <target>1.8</target>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
              <warSourceDirectory>WebContent</warSourceDirectory>
            </configuration>
          </plugin>
        </plugins>
      </build>
      <dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.4</version>
        </dependency>
        <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
          <version>3.0</version>
        </dependency>
        <dependency>
          <groupId>com.sun.jersey</groupId>
          <artifactId>jersey-server</artifactId>
          <version>1.19</version>
        </dependency>
        <dependency>
          <groupId>net.sourceforge.jexcelapi</groupId>
          <artifactId>jxl</artifactId>
          <version>2.6.10</version>
        </dependency>
        <dependency>
          <groupId>asm</groupId>
          <artifactId>asm</artifactId>
          <version>3.3.1</version>
        </dependency>
        <dependency>
          <groupId>com.sun.jersey</groupId>
          <artifactId>jersey-bundle</artifactId>
          <version>1.19</version>
        </dependency>
        <dependency>
          <groupId>org.json</groupId>
          <artifactId>json</artifactId>
          <version>20170516</version>
        </dependency>
        <dependency>
          <groupId>com.sun.jersey</groupId>
          <artifactId>jersey-core</artifactId>
          <version>1.19</version>
        </dependency>
        <dependency>
          <groupId>com.sun.jersey</groupId>
          <artifactId>jersey-json</artifactId>
          <version>1.19</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-servlet</artifactId>
            <version>1.19</version>
        </dependency>
      </dependencies>
    </project>
    

1 个答案:

答案 0 :(得分:0)

由于意外关闭了我的Eclipse,似乎Java Build Path没有保存Maven。这与Adi所回答的答案之一相同

java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

右键单击您的eclipse项目Properties - &gt;部署组件 - &gt;添加 - &gt; Java构建路径条目 - &gt; Gradle Dependencies - &gt;完成。