首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不兼容的Spring依赖项(调用NoSuchMethodError构造函数时的AnnotationRepositoryConfigurationSource )

不兼容的Spring依赖项(调用NoSuchMethodError构造函数时的AnnotationRepositoryConfigurationSource )
EN

Stack Overflow用户
提问于 2017-10-14 14:45:49
回答 1查看 3.8K关注 0票数 0

在添加持久性之后,我不能再启动Spring应用程序了。错误是:

代码语言:javascript
复制
java.lang.NoSuchMethodError: org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource.<init>(Lorg/springframework/core/type/AnnotationMetadata;Ljava/lang/Class;Lorg/springframework/core/io/ResourceLoader;Lorg/springframework/core/env/Environment;Lorg/springframework/beans/factory/support/BeanDefinitionRegistry;)V
at org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport$1.<init>(AbstractRepositoryConfigurationSourceSupport.java:68) ~[spring-boot-autoconfigure-1.5.7.RELEASE.jar:1.5.7.RELEASE]

我追踪到了在AnnotationRepositoryConfigurationSource所在的Spring-Data-Commons1.13.5版本中添加了一个额外的构造函数参数,在1.5.7版本中使用了具有相同构造函数签名的1.13.7版本应该使用spring starter jpa。而且我们只使用版本1.5.7的Spring依赖项。

因此,我构建了依赖树,奇怪地在版本1.13.4中找到了spring Commons1.13.4,而不是1.13.7 (第三行到最后一行):

代码语言:javascript
复制
...(snippet)
[INFO] +- com.name.project:project-subproject8:jar:1.0.0-SNAPSHOT:compile
[INFO] |  \- org.springframework.boot:spring-boot-starter-data-jpa:jar:1.5.7.RELEASE:compile
[INFO] |     +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.5.4.RELEASE:compile
[INFO] |     |  +- org.apache.tomcat:tomcat-jdbc:jar:8.5.15:compile
[INFO] |     |  |  \- org.apache.tomcat:tomcat-juli:jar:8.5.15:compile
[INFO] |     |  \- org.springframework:spring-jdbc:jar:4.3.9.RELEASE:compile
[INFO] |     +- org.hibernate:hibernate-core:jar:5.0.12.Final:compile
[INFO] |     |  +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] |     |  +- antlr:antlr:jar:2.7.7:compile
[INFO] |     |  +- org.jboss:jandex:jar:2.0.0.Final:compile
[INFO] |     |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |     |  \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final:compile
[INFO] |     +- org.hibernate:hibernate-entitymanager:jar:5.0.12.Final:compile
[INFO] |     +- javax.transaction:javax.transaction-api:jar:1.2:compile
[INFO] |     +- org.springframework.data:spring-data-jpa:jar:1.11.4.RELEASE:compile
[INFO] |     |  +- org.springframework.data:spring-data-commons:jar:1.13.4.RELEASE:compile
[INFO] |     |  \- org.springframework:spring-orm:jar:4.3.9.RELEASE:compile
[INFO] |     \- org.springframework:spring-aspects:jar:4.3.9.RELEASE:compile
...

在树的上方,您可以看到spring包含在1.11.4版本中,而根据Spring Boot依赖项附录,它应该是1.11.7版本。这似乎是导致错误的原因。但是我们不依赖spring直接通过我们的pom文件。

所以我不知道这个老版本是如何进入依赖树的。spring-boot-starter data-jpa的pom没有指示任何版本号。

EN

回答 1

Stack Overflow用户

发布于 2017-10-23 13:59:33

我也有同样的问题,是的,现在解决了!您可以始终从外部依赖项中排除特定的内部依赖项。你已经给出了解决这个问题的提示。根本原因是,您很可能是针对缺少方法的类的不同版本编译了类,而不是在运行方法时使用的方法。我切换到了1.5.7版本的spring引导,因此我只需要添加与spring 1.5.7版本兼容的jpa依赖项。为什么要依赖jpa,因为- org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource在spring数据包中。它起了作用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46745791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档