Elasticsearch TransportClient NetworkPlugin NoClassDefFoundError

落爺英雄遲暮 提交于 2019-12-22 05:11:08

问题


I am looking forward to integrate Elasticsearch in a Spring Boot Web Application. Here is my configuration that creates my Transport Client:

@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;
}

When I start the Project I get following error and I don't know why:

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

Did I forgot to add a dependency?

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

Hope you can help me


回答1:


I just stumbled over the same problem. Seems that the Elasticsearch docs aren't complete. In addition to the transport client dependency, you need to also add the elasticsearch dependency:

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

You'll also need the log4j dependency, but that is clearly stated in the Elasticsearch docs.




回答2:


for me it looks like elastic search has a wrong dependency version in the 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>

try to replace the version with 5.1.1 well it looks like it also needs log4j ?!

best regards, noirabys




回答3:


As stated in this issue on Elasticsearch Github pages, SpringBoot starter manages some default dependencies, which defined the default version of ElasticSearch below 5.1.1, so that there is no such class.

You can explicitly define the property in your own pom to override its definition.

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

Hope it helps.



来源:https://stackoverflow.com/questions/41062726/elasticsearch-transportclient-networkplugin-noclassdeffounderror

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!