rest - 将 JAX-RS 应用程序部署到 Tomcat 时出现 IncompatibleClassChangeError

标签 rest maven jersey jax-rs tomcat8

当我使用 JDK 8 在 Tomcat 8 上从 Eclipse 运行我的 Web 项目时,一切都完美无缺,但是一旦我构建这个项目并将 WAR 部署到服务器上的 Tomcat 8,我就会收到以下错误:

java.lang.IncompatibleClassChangeError: com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider and com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$Wadl disagree on InnerClasses attribute

我已经尝试了所有方法,但仍然无法正常工作。

这是我的 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>RestWebService</groupId>
<artifactId>RestWebService</artifactId>
<version>0.1.0</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.3</version>
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin>
  <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
      <warSourceDirectory>WebContent</warSourceDirectory>
      <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
  </plugin>
</plugins>
 </build>

<dependencies>
    <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>20140107</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.5</version>
    </dependency>
            <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>sqljdbc4</artifactId>
        <version>4.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.17.1</version>
    </dependency>
</dependencies>
</project>

这里是项目中所有 JAR 文件的列表:

asm-3.3.1.jar
jersey-bundle-1.19.jar
jsr311-api-1.1.1.jar
json-20140107.jar
jersey-server-1.19.jar
jersey-core-1.19.jar
gson-2.5.jar
sqljdbc4-4.0.jar
jersey-json-1.17.1.jar
jettison-1.1.jar
jaxb-impl-2.2.3-1.jar
jaxb-api-2.2.2.jar
stax-api-1.0-2.jar
activation-1.1.jar
jackson-core-asl-1.9.2.jar
jackson-mapper-asl-1.9.2.jar
jackson-jaxrs-1.9.2.jar
jackson-xc-1.9.2.jar

最佳答案

看起来是依赖版本的问题

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.17.1</version>
</dependency>

以上内容应该与所有其他 Jersey 依赖项匹配相同的版本。所以只需将其更改为 1.19

关于rest - 将 JAX-RS 应用程序部署到 Tomcat 时出现 IncompatibleClassChangeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36846394/

相关文章:

java - 将通用列表发送到 Jersey servlet

spring - @Value 在 Spring/Jersey 应用程序中返回 Null

java - 无法在 netbeans 7.3.1 中使用 Jersey 特定功能

api - 使用 Spring Boot 和 OAuth2 获取此资源的范围不足

javascript - 如何使用node js从http(GET)响应中获取巨大的字符串数据而无需缓冲?

api - 如何验证用户从 Web 应用程序到 API 的身份?

eclipse - 无法执行目标 org.apache.rat :apache-rat-plugin:0. 8:检查(默认)项目 giraph-gora:太多未批准的许可证:56

java - 设置 OpenNLP : Text Detection using the Vision java API

java - 设计一个使用或不使用 Google App Engine 进行部署的应用程序

java - 在 Heroku 上部署 Java + Groovy 混合代码时出错