web-dev-qa-db-ja.com

Elasticsearch TransportClient NetworkPlugin NoClassDefFoundError

ElasticsearchをSpringBootWebアプリケーションに統合することを楽しみにしています。トランスポートクライアントを作成する構成は次のとおりです。

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

プロジェクトを開始すると、次のエラーが発生し、理由がわかりません。

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

依存関係を追加するのを忘れましたか?

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

あなたが私を助けることができることを願っています

7
Timo Ademeit

私はちょうど同じ問題に出くわしました。 Elasticsearchのドキュメントが完全ではないようです。トランスポートクライアントの依存関係に加えて、elasticsearchの依存関係も追加する必要があります。

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

Log4jの依存関係も必要ですが、それは Elasticsearch docs に明確に記載されています。

14
Quagaar

Elasticsearch Githubページの この問題 で述べられているように、SpringBootスターターはいくつかのデフォルトの依存関係を管理します。これは5.1.1未満のElasticSearchのデフォルトバージョンを定義しているため、そのようなクラスはありません。

独自のpomでプロパティを明示的に定義して、その定義を上書きできます。

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

それが役に立てば幸い。

2
riccardo.cardin

私にとっては、ElasticSearchの依存関係のバージョンが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>

バージョンを5.1.1に置き換えてみてください。log4jも必要なようです。

よろしく、noirabys

2
noirabys