1

Я собираюсь добавить поддержку Spring Data Elasticsearch в мой существующий Spring Boot 1.5.1 приложения с Spring Data Neo4j 4.2.0.RELEASE.Spring Data Neo4j 4.2.0.RELEASE и Spring Data Elasticsearch 2.1.0.RELEASE - java.lang.NoSuchFieldError: LUCENE_5_5_2

я добавил следующую Maven зависимость в моем pom.xml:

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

и сейчас мое приложение дает сбой при запуске со следующим исключением:

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 

Это мой 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> 

Как правильно настроить Spring Boot 1.5.1 с Spring Data Neo4j 4.2.0.RELEASE и Spring Data Elasticsearch 2.1.0.RELEASE?

ответ

2

Версии Lucene, которые требуют эластичный поиск и требования Neo4j, различны. Spring Data Neo4j будет использовать библиотеку Lucene только в том случае, если вы используете neo4j-ogm-embedded-driver, и если вы укажете версию neo4j для использования. В вашем помпе указываются все три драйвера: болт, http и встроенный.

Сначала определите, какой драйвер вам действительно нужен. Указывайте только этот драйвер. Если вы используете встроенный драйвер, вам нужно будет добавить другую зависимость, чтобы добавить версию Neo4j, которую вы хотите использовать. Когда вы включаете эту зависимость в свой pom, вам нужно будет исключить lucene (или, альтернативно, рассказать весенние данные elasticsearch, чтобы исключить lucene).

Вам также нужно будет понять, что если вы используете последний вариант, у вас могут быть несовместимости в связанных библиотеках. В идеале вы захотите использовать версии проектов Spring Data, которые используют один и тот же основной и младший semver для Lucene.

 Смежные вопросы

  • Нет связанных вопросов^_^