错误“Aws-sdk-java”与 maven 冲突

Posted

技术标签:

【中文标题】错误“Aws-sdk-java”与 maven 冲突【英文标题】:Error "Aws-sdk-java" conflict with maven 【发布时间】:2018-04-05 05:35:25 【问题描述】:

我在使用 aws-sdk-java 时遇到冲突问题,我不再知道该怎么办。

我已经尝试了几件事,我研究了几个主题,但我无法解决。

java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.enable(Lcom/fasterxml/jackson/core/JsonParser$Feature;) Lcom/fasterxml/jackson/databind/ObjectMapper;

我的 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>com.matheus.api</groupId>
<artifactId>matheus.api</artifactId>
<version>1.0.25.1</version>
<packaging>war</packaging>
<name>matheus.api</name>

<properties>
    <endorsed.dir>$project.build.directory/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArguments>
                    <endorseddirs>$endorsed.dir</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.0.1</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>$endorsed.dir</outputDirectory>
                        <silent>true</silent>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax</groupId>
                                <artifactId>javaee-endorsed-api</artifactId>
                                <version>6.0</version>
                                <type>jar</type>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-bom</artifactId>
            <version>1.11.78</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.6.6</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.25</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.25</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>com.thetransactioncompany</groupId>
        <artifactId>cors-filter</artifactId>
        <version>2.6</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>javax.mail-api</artifactId>
        <version>1.6.0</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0.1</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20170516</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>2.6.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-email</artifactId>
        <version>1.4</version>
    </dependency>


    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4.1208.jre7</version>
    </dependency>

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.6.2</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.security</groupId>
        <artifactId>xml-security-impl</artifactId>
        <version>1.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.6</version>
    </dependency>

    <dependency>
        <groupId>com.google.apis</groupId>
        <artifactId>google-api-services-calendar</artifactId>
        <version>v3-rev262-1.23.0</version>
        <exclusions>
            <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava-jdk5</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

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

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-s3</artifactId>
    </dependency>
</dependencies>

【问题讨论】:

请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。 抱歉,谢谢!!! 请用完整的堆栈跟踪更新您的问题,在代码块中而不是在引号中。 另外,请确认您正在运行您认为的代码。我在您发布的 POM 上运行了mvn dependency:tree,您应该没有理由收到此错误:&lt;dependencyManagement&gt; 部分强制杰克逊依赖项的版本一致性。如果没有该部分,您确实有一个较旧的 jackson-core 依赖被拉入,并且该版本没有问题的方法。 &lt;dependencyManagement&gt; 部分是避免不兼容的传递依赖项的最简单方法,但是您必须查看依赖关系树并确保捕获所有内容(Jackson 在这方面特别痛苦,因为它有很多文物)。而且您确实冒着使用破坏向后兼容性的太新的依赖项的风险(但没有办法解决这个问题)。 【参考方案1】:

您可能想要签出 bundle 依赖项,而不是通过 BOM 获取依赖项。更好地解释 here,但它有效地将 AWS SDK for Java 所需的所有第三方类捆绑(并重新定位)到单个 uber JAR 中 - 而不是尝试传递地解决依赖关系。它使用 Maven Shade 插件来做到这一点。

【讨论】:

感谢您的回复,但使用 bundle 非常大 60 mb 这样项目就变得庞大了。 是的,这就是缺点。另一种选择是您可以自己从源代码构建 SDK 版本并将其包含在您的项目中。查看 Maven Shade 插件,当然这意味着您自己管理构建/工件。 你有例子吗? Tks

以上是关于错误“Aws-sdk-java”与 maven 冲突的主要内容,如果未能解决你的问题,请参考以下文章

如何快速的解决Maven依赖冲突

如何快速的解决Maven依赖冲突

增值税电子普通发票冲红方法

这些大佬告诉你,在先进计算与AI领域该往哪个方向冲!

Maven(Eclipse / Mojo)中的错误状态与代码生成(OpenAPI 5.3)和自定义模板混淆

Maven 错误:模块的 Maven 项目配置不可用