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

标签 java eclipse maven tomcat jersey

我的 Node.JS API (localhost) 在 Tomcat 服务器 (localhost) 上调用 Jersey API 之前工作得很好,但我不知道为什么今天不小心失败了。我检查过自上周以来所有文件都没有修改过。一旦我尝试获取 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)
    ...

我进行了很多调查,但仍然找不到解决问题的方法。以下是我之前尝试解决这个问题的方法,其中还附加了开发环境、web.xml 和 pom.xml。谢谢。

  1. 安装 maven (brew), m2eclipse (Eclipse install new software), m2e-wtp (Eclipse install new software) Eclipse 安装新软件:Help -> Install New Software -> copy paste the url into "Work with"->全选,下一步,完成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 -> Preferences -> Server -> Runtime Environments -> Remove all unrelated servers
  7. 添加服务器 Tomcat Detail在运行服务器之前,双击服务器 -> 服务器位置:使用 Tomcat 安装... Detail
  8. 右键单击项目 -> 属性 -> 项目方面 -> 选择:动态 Web 模块、Java、JavaScript、JAX-RS(REST Web 服务) -> 运行时 -> 选择正确的服务器 -> 应用 -> 应用并选择
  9. 启动服务器->运行项目->浏览器http://localhost:8080/->显示Tomcat的欢迎页面

环境

  • Mac 操作系统 x 10.13.2,x86_64
  • Eclipse Oxygen.2 版本 (4.7.2)
  • 后端
    • Java jdk1.8.0_151-b12
      • Tomcat 8.5
      • maven 3.5.2 默认语言环境:en_AU,平台编码:UTF-8
      • Jersey 1.19
    • 节点 8.9.4
      • NPM 5.6.0
      • 凉亭 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>

最佳答案

由于不小心关闭了我的Eclipse,Java Build Path 似乎没有保存Maven。和阿迪回答的其中一个答案是一样的

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

右键单击您的 eclipse 项目属性 -> 部署程序集 -> 添加 -> Java 构建路径条目 -> Gradle 依赖项 -> 完成。

关于java - Jersey 错误 java.lang.ClassNotFoundException : com. sun.jersey.spi.container.servlet.ServletContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49237270/

相关文章:

java - 为什么链接在我的基于 Xtext 的 DSL 中不起作用?

java - 不支持的 major.minor 版本 51.0 (org/apache/maven/cli/MavenCli) - MAC OS X

maven - 将 Maven Artifact 传递下载到本地存储库

java - 如何正确插入排序?

java - 从可用的不同版本中选择 Mac 中更新的 Java SDK

java等待来自线程的事件

java - 使用 WAS7 进行 Maven 安装

java - 如何使用正则表达式匹配一行中的两个作品

eclipse - Eclipse 中是否有任何方法可以像 Netbeans 那样格式化包含 div 的代码?

java - InetAddress.getAllByName() 抛出 UnknownHostException