杰克逊依赖/ Tomcat的冲突

时间:2016-02-24 21:56:03

标签: java maven jackson

我的java类在tomcat上部署时抛出此错误:

before do
  sign_in :user, user
end

在本地测试时,课程运行良好。我知道杰克逊版本可能存在冲突,但我无法找到答案。

这是我的pom.xml的摘录

org.apache.jasper.JasperException: 
javax.servlet.ServletException: java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonParser.getValueAsString()Ljava/lang/String;
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:556)

App在Tomcat 7.0上运行。 修改:已添加完整 <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>com.skylads.skott.webapp</groupId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>Skylads CRM App</name> <description>CRM App integrating various features</description> <build> <sourceDirectory>src</sourceDirectory> <resources> <resource> <directory>src</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> <resource> <directory>resources</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> <artifactId>crm</artifactId> <dependencies> <dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-oauth2</artifactId> <exclusions> <exclusion> <artifactId>jackson-core</artifactId> <groupId>com.fasterxml.jackson.core</groupId> </exclusion> </exclusions> <version>v2-rev98-1.20.0</version> </dependency> <dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-plus</artifactId> <version>v1-rev323-1.21.0</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>com.google.oauth-client</groupId> <artifactId>google-oauth-client-java6</artifactId> <version>1.21.0</version> </dependency> <dependency> <groupId>com.google.http-client</groupId> <artifactId>google-http-client-jackson</artifactId> <version>1.20.0</version> </dependency> <dependency> <groupId>com.google.oauth-client</groupId> <artifactId>google-oauth-client</artifactId> <version>1.21.0</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.1</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> <version>7.0.35</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.scribe</groupId> <artifactId>scribe</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.1.3</version> </dependency> </dependencies> </dependencyManagement> </project> 非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

好的,伙计们,我已经摆脱了这场噩梦。我使用http://jhades.org/来识别重叠的jar,进入web-inf并删除存在冲突并产生问题的旧罐子。

Maven非常酷,但并没有解决所有问题,我在这个问题上输了3小时+ ...

再次感谢您的贡献,非常有帮助。

Soufian

答案 1 :(得分:0)

正如你在tomcat上所说,你使用的是不同版本的jackson-core而不是你的版本。 通过mvn help找出你在maven中使用的内容:effective-pom 看看你在战争中打包的内容。 它也有可能,tomcat使用自己的jackson库来解决问题。

答案 2 :(得分:0)

您尚未提供有关您的问题的详细信息,但我可以告诉您,版本2.1.0是第一个采用getValueAsString方法的版本。你的pom.xml中的version也有它。旧版本没有它,这就是你的问题所在。所以根据我的经验,这显然是一个问题,你有两个jackson-core jar版本正在运行,类加载器首先得到旧版本。您需要执行以下操作:

$ find . -name "*jackson*"
在您的tomcat 7目录中

。找到旧版本并将其从集成中删除。阅读tomcat 7网页,了解有关tomcat版本的类加载器的更多信息。