Spring Boot,AWS应用程序上的Jackson数据绑定依赖错误

Posted

技术标签:

【中文标题】Spring Boot,AWS应用程序上的Jackson数据绑定依赖错误【英文标题】:Jackson databind dependency error on Spring Boot, AWS application 【发布时间】:2017-12-05 13:17:15 【问题描述】:

我从 start.spring.io 创建了一个带有 Web 依赖项的 Spring Boot 应用程序。然后我将 AWS SDK 依赖项添加为 -

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk</artifactId>
    <version>1.11.157</version>
</dependency>

在构建应用程序时,我收到以下错误 -

2017-07-02 03:02:11.431  WARN 18412 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerAdapter' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]: Factory method 'requestMappingHandlerAdapter' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageConverters' defined in class path resource [org/springframework/boot/autoconfigure/http/HttpMessageConvertersAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.http.HttpMessageConverters]: Factory method 'messageConverters' threw exception; nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/Module

在哪里

nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/Module

在错误日志中多次出现。

我检查了树和依赖层次结构等,但如果我从 AWS 依赖中排除 Jackson,仍然会发生相同的错误。 如何解决这个错误?

这里是 pom.xml -

<?xml version="1.0" encoding="UTF-8"?>
<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.sample1</groupId>
    <artifactId>Sample13</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>Sample13</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.M2</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.amazonaws</groupId>
                <artifactId>aws-java-sdk-bom</artifactId>
                <version>1.11.106</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.11.157</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

【问题讨论】:

【参考方案1】:

您将 Jackson 从 AWS Dependency 和 Spring Boot 中排除,也没有将其定义为依赖项。

为什么要排除 jackson 是必需的。

在不将 Jackson 从 Spring Boot 中排除的情况下,应用程序启动,

具体示例 - https://github.com/Flaw101/jackson-databind-error

【讨论】:

不,我不排除同时启动 AWS 和 Boot,而仅排除其中一个。我也单独添加了杰克逊。所以,我尝试了所有的可能性。 @DevS 我没有在任何地方看到单独的包含。 @DevS 在您的示例中,杰克逊在哪里定义为单独的依赖项。 我已经编辑了帖子并粘贴了原来的 pom。我正在尝试这些排除项、单独的包含项等(我碰巧发布了),但没有任何效果。 @DevS 一定是其他原因造成的。用你当前的 POM 更新了我的 gitrepo,应用程序仍然启动。我还要指出您的 BOM 导入目前是无用的,因为您正在使用包含每个 AWS SDK 片段的胖 jar,而不是提取您需要的由 BOM 支持的模块。【参考方案2】:

我遇到了同样的问题,在删除以下依赖项后解决了我的问题。 移除依赖:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk</artifactId>
    <version>1.11.157</version>
</dependency>

它非常适合我。

【讨论】:

以上是关于Spring Boot,AWS应用程序上的Jackson数据绑定依赖错误的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot,AWS应用程序上的Jackson数据绑定依赖错误

AWS Beanstalk 上的 Spring Boot 抛出 404

AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件

aws弹性beantalk上的HTTP到HTTPS不适用于Spring Boot

将 Spring Boot 应用程序部署到 AWS beanstalk

如何在我的 Spring Boot 应用程序中从 AWS 访问环境变量