1

Ich werde mit Spring Data Neo4j 4.2.0.RELEASESpring Data Elasticsearch Unterstützung in meine bestehende Spring Boot 1.5.1 Anwendung hinzuzufügen.Spring Data Neo4j 4.2.0.RELEASE und Spring Data Elasticsearch 2.1.0.RELEASE - java.lang.NoSuchFieldError: LUCENE_5_5_2

Ich habe folgende Maven Abhängigkeit in meine pom.xml hinzugefügt:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId> 
</dependency> 

und jetzt meine Anwendung schlägt mit folgenden Ausnahme bei der Inbetriebnahme:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elasticsearchClient' defined in class path resource [org/springframework/boot/autoconfigure/data/elasticsearch/ElasticsearchAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.Client]: Factory method 'elasticsearchClient' threw exception; nested exception is java.lang.NoSuchFieldError: LUCENE_5_5_2 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) 
    at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120) 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) 
    ... 25 common frames omitted 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.Client]: Factory method 'elasticsearchClient' threw exception; nested exception is java.lang.NoSuchFieldError: LUCENE_5_5_2 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
    ... 42 common frames omitted 
Caused by: java.lang.NoSuchFieldError: LUCENE_5_5_2 
    at org.elasticsearch.Version.<clinit>(Version.java:309) 
    at org.elasticsearch.node.Node.<init>(Node.java:140) 
    at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:143) 
    at org.elasticsearch.node.NodeBuilder.node(NodeBuilder.java:150) 
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration.createNodeClient(ElasticsearchAutoConfiguration.java:107) 
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration.createClient(ElasticsearchAutoConfiguration.java:95) 
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration.elasticsearchClient(ElasticsearchAutoConfiguration.java:84) 
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration$$EnhancerBySpringCGLIB$$42d9c766.CGLIB$elasticsearchClient$1(<generated>) 
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration$$EnhancerBySpringCGLIB$$42d9c766$$FastClassBySpringCGLIB$$450abfed.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) 
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration$$EnhancerBySpringCGLIB$$42d9c766.elasticsearchClient(<generated>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
    ... 43 common frames omitted 

Das ist mein pom.xml :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <parent> 
     <artifactId>example</artifactId> 
     <groupId>com.example</groupId> 
     <version>0.0.1</version> 
    </parent> 

    <modelVersion>4.0.0</modelVersion> 

    <artifactId>domain</artifactId> 
    <packaging>jar</packaging> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 

     <neo4j.version>3.1.0</neo4j.version> 
     <guava.version>19.0-rc1</guava.version> 
     <owasp-java-html-sanitize.version>20160924.1</owasp-java-html-sanitize.version> 
    </properties> 

    <repositories> 
     <repository> 
      <id>spring-snapshots</id> 
      <name>Spring Snapshots</name> 
      <url>https://repo.spring.io/libs-snapshot</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </repository> 
     <repository> 
      <id>neo4j-snapshot-repository</id> 
      <name>Neo4j Maven 2 snapshot repository</name> 
      <url>http://m2.neo4j.org/content/repositories/snapshots</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
     </repository> 
    </repositories> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>${java.source.version}</source> 
        <target>${java.target.version}</target> 
        <encoding>${project.build.sourceEncoding}</encoding> 
        <optimize>true</optimize> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <configuration> 
        <encoding>${project.build.sourceEncoding}</encoding> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-elasticsearch</artifactId> 
     </dependency> 

     <!-- neo4j --> 
     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j-ogm-core</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j-ogm-http-driver</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j-ogm-embedded-driver</artifactId> 
      <version>${neo4j-ogm.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j-ogm-bolt-driver</artifactId> 
      <version>${neo4j-ogm.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j-enterprise</artifactId> 
      <version>${neo4j.version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.neo4j</groupId> 
        <artifactId>neo4j-security-enterprise</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j</artifactId> 
      <version>${neo4j.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-neo4j</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.social</groupId> 
      <artifactId>spring-social-security</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.security.oauth</groupId> 
      <artifactId>spring-security-oauth2</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-validation</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-social-twitter</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>com.google.guava</groupId> 
      <artifactId>guava</artifactId> 
      <version>${guava.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>com.googlecode.owasp-java-html-sanitizer</groupId> 
      <artifactId>owasp-java-html-sanitizer</artifactId> 
      <version>${owasp-java-html-sanitize.version}</version> 
     </dependency> 

    </dependencies> 

</project> 

So konfigurieren Sie richtig Spring Boot 1.5.1 mit Spring Data Neo4j 4.2.0.RELEASE und Spring Data Elasticsearch 2.1.0.RELEASE?

Antwort

2

Die Versionen von Lucene, die elastische Suche und Neo4j erfordern, sind unterschiedlich. Spring Data Neo4j verwendet nur die Lucene-Bibliothek, wenn Sie die neo4j-ogm-embedded-driver verwenden und wenn Sie die Version neo4j angeben, die verwendet werden soll. In Ihrem Pom geben Sie alle drei Treiber an: bolt, http und embedded.

Bestimmen Sie zunächst, welchen Treiber Sie wirklich benötigen. Geben Sie nur diesen Treiber an. Wenn Sie den eingebetteten Treiber verwenden, müssen Sie eine weitere Abhängigkeit hinzufügen, um die Version von Neo4j hinzuzufügen, die Sie verwenden möchten. Wenn Sie diese Abhängigkeit in Ihr Pom einbeziehen, müssen Sie Lucene ausschließen (oder alternativ Spring Data elasticsearch mitteilen, um Lucene auszuschließen).

Sie müssen auch erkennen, dass, wenn Sie die letztere Option verwenden, Sie Inkompatibilitäten in verwandten Bibliotheken haben können. Idealerweise sollten Sie Versionen der Spring Data-Projekte verwenden, die für Lucene denselben Dur- und Moll-Semver verwenden.

Verwandte Themen