添加持久性后,我无法启动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]
我将此跟踪到 spring-data-commons 中的更改,其中 AnnotationRepositoryConfigurationSource 位于其中,并在版本1.13.5和版本1.13中添加了其他构造函数参数。具有相同构造函数签名的7应该由版本1.5.7中的 spring-boot-starter-data-jpa 使用。我们只使用版本号为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 Appendix,它应该是版本1.11.7。这似乎导致错误。但我们并不直接通过我们的pom文件依赖 spring-data-jpa 。
所以我不知道这个旧版本是如何进入依赖树的。 spring-boot-starter-data-jpa 的pom并不表示任何版本号。
答案 0 :(得分:0)
我有同样的问题,是的,现在已经解决了! 您始终可以从外部依赖项中排除特定的内部依赖项。您已经提示解决此问题。 根本原因是您很可能已经针对缺少方法的类的不同版本编译了一个类,而不是运行它时使用的类。 我切换到1.5.7版本的spring boot,所以我只需要添加与spring boot 1.5.7版本兼容的jpa依赖项。为什么jpa依赖,因为 - org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource在spring数据包中。它工作了