有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

最新版本和旧版本冲突的java双Maven依赖关系

我使用的是来自here的spring数据dynamoDB项目,根据它的pom.xml,他们使用了1.6.9.1版本的aws java sdk,但我的项目也需要使用最新版本的aws java sdk,以使用它的一些特性来实现AmazonS3。如果我包括它的依赖性

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

我得到一个例外,如下所示

12:51:25.298 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Retrieved dependent beans for bean '(inner bean)': [_relProvider]
12:51:25.307 [main] ERROR o.s.w.c.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.hateoas.config.HypermediaSupportBeanDefinitionRegistrar$Jackson2ModuleRegisteringBeanPostProcessor#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '_halObjectMapper': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.fasterxml.jackson.databind.ObjectMapper]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE]
.......
.......

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '_halObjectMapper': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.fasterxml.jackson.databind.ObjectMapper]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1076) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE]
.......
.......

我尝试过如下排除,结果也是一样的

<dependency>
   <groupId>org.socialsignin</groupId>
   <artifactId>spring-data-dynamodb</artifactId>
   <version>1.0.0-SNAPSHOT</version>
   <exclusions>
      <exclusion>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
      </exclusion>
   </exclusions>
</dependency>

现在可以在我的项目中使用最新版本的aws java sdk吗??或者spring数据生成器pom。xml必须更新,如果是这样的话,只有我能使用它或者什么?? 感谢Michaellavelle为这个伟大的项目所做的一切。这对我完成DynamoDB部分有很大帮助


共 (3) 个答案

  1. # 1 楼答案

    错误是NoClassDefFound for com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering。我在GrepCode中搜索了那个类,发现它在com.fasterxml.jackson.core:jackson-core库中。我的猜测是,您尝试的aws-java-sdk库的两个版本将不同的jackson core库版本指定为可传递依赖项。您的应用程序可能也明确依赖于jackson-core,这是一个比后面的aws-java-sdk所需版本更旧的版本。该项目需要使用包含requiresPropertyOrdering方法的jackson core版本。通过运行mvn dependency:tree(或IDE中的等效程序),您应该能够看到所有可传递的依赖项

    一种修复方法是将jackson-core库添加到项目POM(或父POM)中的<dependencyManagement>块中,以确保使用正确的版本

  2. # 2 楼答案

    谢谢@user944849。问题是aws java sdk中使用的jackson LIB与spring data rest webmvc中的版本相比是较低的,并且与之冲突,因此将jackson LIB从aws java sdk中排除是正确的。我得到的解决方案是

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.7.9</version>
        <exclusions>
            <exclusion>
                <artifactId>jackson-core</artifactId>
                <groupId>com.fasterxml.jackson.core</groupId>
            </exclusion>
            <exclusion>
                <artifactId>jackson-databind</artifactId>
                <groupId>com.fasterxml.jackson.core</groupId>
            </exclusion>
            <exclusion>
                <artifactId>jackson-annotations</artifactId>
                <groupId>com.fasterxml.jackson.core</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    

    由于声誉问题,我无法提前发布回复。这可能对像我一样坚持的人有用。谢谢

  3. # 3 楼答案

    出于某种原因,将jackson排除在aws java之外对我来说不起作用

    java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
    

    从这个问题来看,杰克逊似乎不在,或者我们的项目中出现了错误的版本。这种方法似乎是在杰克逊最新版本2.3.0中添加的。我在最新版本的jackson中添加了一个依赖项,我的代码现在很高兴

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-s3</artifactId>
        <version>1.9.6</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.3.0</version>
    </dependency>
    

    我不确定是否需要注释和数据绑定。另外,我正在做一个巨大的项目,所以不同形式的jackson可能来自不同的其他依赖项,jersey,google-http-client-jackson2。因此,查看maven依赖关系图来了解杰克逊的来源也是明智的