AnnotatedElementUtils.findMergedAnnotation

关于MongoDB,有一个核心操作类:MongoTemplate,使用这个MongoDB模板类可以很方便的对MongoDB数据进行CRUD操作,而这个类位于spring-data-mongodb这个jar包下,所以在使用maven进行web开发时,我们需要在pom.xml下引入依赖。

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>2.0.8.RELEASE</version>
</dependency>
	
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.8.0</version>
</dependency>

在操作过程中,老是出现如下错误:

java.lang.NoSuchMethodError:org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;)

起初,以为是MongoDB的配置出了问题,但是经过调试,发现mongo-config.xml文件是没有问题的。

由于项目使用了spring框架,所以pom.xml文件引入了很多依赖,初步判断是依赖版本冲突导致,但是却无从下手。

经过度娘,了解到了spring-context (<spring.version>4.1.6.RELEASE</spring.version>)中会有spring-expression的版本信息

但是,在spring-data-mongodb 2.0.8.RELEASE的版本中也存在了spring-expression的版本信息,于是乎,这两者便产生了冲突

找到了问题所在,接下来便是解决问题了。

方法一:把    <artifactId>spring-data-mongodb</artifactId>
                      <version>2.0.8.RELEASE</version>
              换成 <artifactId>spring-data-mongodb</artifactId>
                        <version>1.4.2.RELEASE</version>
             也即是把 spring-data-mongodb 换成较低的 1.4.2.RELEASE 版本

方法二:  有网友说,在 spring-data-mongodb 依赖中去除 spring-expression 的版本信息,但是,此种方法在spring-data-mongodb的版本为2.0.8.RELEASE还是会不能解决问题,我在想,是不是2.0.8版本太高,其中不止spring-expression存在冲突,还有其它的spring包冲突

至此,使用第一种方法,解决折腾了一个上午的版本信息冲突问题,所以说程序猿的时间都去哪里了呢!!

另外,虽然说spring等一些主流框架会给我们带来开发上极大的便利了,但是有一些极细节的坑却是很多人都会不经意就会猜到,就像是上面的版本信息问题,相信很多人都遇到过

猜你喜欢

转载自blog.csdn.net/weixin_37778823/article/details/82081159