web-dev-qa-db-fra.com

Elasticsearch TransportClient NetworkPlugin NoClassDefFoundError

Je suis impatient d'intégrer Elasticsearch dans une application Web Spring Boot. Voici ma configuration qui crée mon client de transport:

@Configuration
public class ElasticsearchConfig {

private TransportClient client;

@Bean
public TransportClient client() throws UnknownHostException{

    Settings settings = Settings.builder()
            .put("client.transport.nodes_sampler_interval", "5s")
            .put("client.transport.sniff", false)
            .put("transport.tcp.compress", true)
            .put("cluster.name", "clusterName")
            .put("xpack.security.transport.ssl.enabled", true)
            .build();

    client = new PreBuiltTransportClient(settings);

    client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

    return client;
}

Lorsque je lance le projet, l'erreur suivante s'affiche et je ne sais pas pourquoi:

Java.lang.ClassNotFoundException: org.elasticsearch.plugins.NetworkPlugin

Ai-je oublié d'ajouter une dépendance?

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>5.1.1</version>
</dependency>

J'espère que vous pourrez m'aider

6
Timo Ademeit

Je suis tombé sur le même problème. Il semble que la documentation Elasticsearch ne soit pas complète. En plus de la dépendance du client de transport, vous devez également ajouter la dépendance elasticsearch:

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>5.1.1</version>
</dependency>

Vous aurez également besoin de la dépendance log4j, mais cela est clairement indiqué dans le Elasticsearch docs .

13
Quagaar

Comme indiqué dans ce problème sur les pages Elasticsearch Github, SpringBoot Starter gère certaines dépendances par défaut, qui définissent la version par défaut d’ElasticSearch au-dessous de 5.1.1, de sorte qu’il n’existe pas de classe de ce type. 

Vous pouvez définir explicitement la propriété dans votre propre pom pour remplacer sa définition.

<properties>
    <elasticsearch.version>5.1.1</elasticsearch.version>
</properties>

J'espère que ça aide.

2
riccardo.cardin

pour moi, il semble que la recherche élastique a une mauvaise version de dépendance dans le pom

  <properties>
    <log4j.version>2.6.2</log4j.version>
</properties>

<dependencies>


  <dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>5.1.1</version>

  </dependency>

  <dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>5.1.1</version>

    <exclusions>
      <exclusion>
        <artifactId>elasticsearch</artifactId>            
        <groupId>org.elasticsearch</groupId></exclusion>
    </exclusions>
  </dependency>      
   <dependency>
        <groupId>org.Apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.Apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.Apache.logging.log4j</groupId>
        <artifactId>log4j-web</artifactId>
        <version>${log4j.version}</version>
    </dependency>

essayez de remplacer la version par 5.1.1 Et bien, il semble qu’il faut aussi log4j?!

cordialement, noirabys

2
noirabys