最新版本和旧版本冲突的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部分有很大帮助
# 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 楼答案
谢谢@user944849。问题是aws java sdk中使用的jackson LIB与spring data rest webmvc中的版本相比是较低的,并且与之冲突,因此将jackson LIB从aws java sdk中排除是正确的。我得到的解决方案是
由于声誉问题,我无法提前发布回复。这可能对像我一样坚持的人有用。谢谢
# 3 楼答案
出于某种原因,将jackson排除在aws java之外对我来说不起作用
从这个问题来看,杰克逊似乎不在,或者我们的项目中出现了错误的版本。这种方法似乎是在杰克逊最新版本2.3.0中添加的。我在最新版本的jackson中添加了一个依赖项,我的代码现在很高兴
我不确定是否需要注释和数据绑定。另外,我正在做一个巨大的项目,所以不同形式的jackson可能来自不同的其他依赖项,jersey,google-http-client-jackson2。因此,查看maven依赖关系图来了解杰克逊的来源也是明智的