java - 未找到 Jersey 类...但它就在那里

标签 java spring jersey

按照 jersey github 中的示例进行操作,在 Eclipse 的嵌入式 J2ee Preview 服务器中运行时,出现 java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer。

我尝试过的方法(没有效果)

每个网站/SO 帖子都说将您的库复制到 web-inf/lib 中。我正在使用 Maven,所以这不是问题。

我已按照另一篇建议的帖子将 Maven 依赖项添加到我的部署程序集中。 (属性>部署程序集)

它所提示的类存在于我的类路径中。

我使用的是 Jersey 2.x 库,而不是 1.x。

Eclipse -> 属性 -> Maven -> “解决依赖关系...”已启用。

POM

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.foo</groupId>
        <artifactId>matching-engine</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>web</artifactId>
    <packaging>war</packaging>
    <name>web Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <properties>
        <jersey.version>2.21</jersey.version>
        <spring.version>4.2.1.RELEASE</spring.version>
        <maven.compiler.plugin.version>3.3</maven.compiler.plugin.version>
    </properties>

    <build>
        <finalName>web</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.foo</groupId>
            <artifactId>core</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>${jersey.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

web.xml

 <!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <servlet>
        <servlet-name>Web</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.foo.web.conf.Application</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Web</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

最佳答案

错误:

NoClassDefFoundError: javax/servlet/ServletContextListener

意味着您缺少 servlet-api 依赖项。您正在声明 3.0 webapp,因此您应该在 3.0 版本中添加依赖项。此外,该依赖项需要有一个提供的范围,因为它是由服务器在运行时提供的。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

关于java - 未找到 Jersey 类...但它就在那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32505801/

相关文章:

java - H2:生成插入脚本初始化脚本

java - Jersey Web 服务和 hibernate 一对多映射

java - Struts2登录管理和授权

java - Apache ActiveMQ : What is TCP Port 64119 Used For?

java - 这是如何返回 "Given final block not properly padded"的?

初始化时出现 java.lang.NoSuchMethodError 错误。 session 工厂

java - Jetty 服务器中项目部署期间发生 BeanCreationException

rest - QueryParam 与 Jersey 中的枚举绑定(bind)

java - 使用多个 namespace 解码

java - 当Mybatis同时使用WHERE IF DESC和LIMIT时,IDEA显示无法解析表 'LIMIT'