0

添加持久性后,我无法再启动我的 Spring Boot 应用程序。错误是:

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-commons中的更改,并且在版本 1.13.5 中添加了一个额外的构造函数参数,并且spring-boot-starter-data应该使用具有相同构造函数签名的版本 1.13.7 -jpa在版本 1.5.7 中。而且我们只使用版本号为 1.5.7 的 Spring Boot 依赖项。

于是我构建了依赖树,奇怪的是在 1.13.4 版本中找到了spring-data-commons,而不是 1.13.7(倒数第三行):

...(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-data-jpa包含在 1.11.4 版本中,而根据Spring Boot Dependency Annex,它应该是 1.11.7 版本。这似乎导致了错误。但是我们不直接通过我们的 pom 文件依赖spring-data-jpa 。

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

4

1 回答 1

0

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

于 2017-10-23T13:59:33.310 回答