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.
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>