1

I'm using Spring Data Solr in a Spring boot application (1.2.7). Now, because of Spring Data Solr Precedence for Custom Repository I have to update Spring Data Solr to 1.4.x at least, while it's currently on 1.3.x.

However, if I explicitely add the following dependency:

<dependency>
   <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-solr</artifactId>
    <version>1.4.2.RELEASE</version>
</dependency>

And I run the application, I get the following exception:

Caused by: java.lang.NoClassDefFoundError: org/springframework/data/mapping/PersistentPropertyAccessor
    at org.springframework.data.solr.core.SolrTemplate.getDefaultSolrConverter(SolrTemplate.java:573)
    at org.springframework.data.solr.core.SolrTemplate.afterPropertiesSet(SolrTemplate.java:622)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    ... 61 more
Caused by: java.lang.ClassNotFoundException: org.springframework.data.mapping.PersistentPropertyAccessor
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 65 more

I know that you should usually trust the dependency management of Spring boot itself, but that means you're not able to put parentheses around parts of a Solr query using criteria, which is pretty critical.

Community
  • 1
  • 1
g00glen00b
  • 41,995
  • 13
  • 95
  • 133

1 Answers1

2

Spring Data's released as a group of modules that are all designed to work together. By only upgrading spring-data-solr you're trying to get it to work with older versions of all of its Spring Data dependencies. I'd recommend upgrading all of Spring Data instead so that you get a consistent set of versions.

The Spring Data Fowler release train contains Spring Data Solr 1.4.x and SR2 contains Spring Data Solr 1.4.2. Assuming you're using spring-boot-starter-parent as your pom's parent, you can use this version by overriding the spring-data-releasetrain.version property:

<properties>
    <spring-data-releasetrain.version>Fowler-SR2</<spring-data-releasetrain.version>
</properties>
Andy Wilkinson
  • 108,729
  • 24
  • 257
  • 242
  • I'm not using Spring boot directly as my POM's parent, so I added the releasetrain (with the version you provided) as the first entry in my `` section and that did the trick. Thanks to your answer I now know the existence of the release train. – g00glen00b Jan 25 '16 at 10:50