web-dev-qa-db-ja.com

Elasticsearch Javaクライアントの初期化に失敗しました

Elasticsearchに接続するアプリケーションを実行しようとすると、このエラーメッセージが表示されます。

An attempt was made to call the method org.elasticsearch.client.RestHighLevelClient.<init>(Lorg/elasticsearch/client/RestClientBuilder;)V but it does not exist. Its class, org.elasticsearch.client.RestHighLevelClient, is available from the following locations:

jar:file:/path/application/target/application-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/elasticsearch-rest-high-level-client-5.6.3.jar!/org/elasticsearch/client/RestHighLevelClient.class

It was loaded from the following location:

jar:file:/path/application/target/application-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/elasticsearch-rest-high-level-client-5.6.3.jar!/

Action:

Correct the classpath of your application so that it contains a single, compatible version of org.elasticsearch.client.RestHighLevelClient

アプリケーションはエラーなしでビルドされ、elasticsearchSDKのバージョンは1つだけ私のMavenリポジトリに存在します。

これは私のpomの関連部分です:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath />
    </parent>

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

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-client</artifactId>
        <version>5.6.3</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>5.6.3</version>
        <exclusions>
            <exclusion>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-client</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

これは、アプリケーションの実行中に発生する例外です。

org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.RestHighLevelClient]: Factory method 'restHighLevelClient' threw exception; nested exception is Java.lang.NoSuchMethodError: org.elasticsearch.client.RestHighLevelClient.<init>(Lorg/elasticsearch/client/RestClientBuilder;)V

これが私がRestHighLevelClientを初期化する方法です:

RestClientBuilder builder = RestClient
                .builder(new HttpHost(hostname, port, scheme));
builder.setMaxRetryTimeoutMillis(timeout);
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder.build());
5
varshavp27

Spring Bootは、elastic 6 RestHighLevelClient(org.elasticsearch.client.RestClientBuilder builder)を内部的に使用してelasticクライアントを作成するelasticsearchを自動構成しようとします。古いバージョンのelasticsearchに接続する場合は、elasticsearchの自動構成を除外してください。

@EnableAutoConfiguration(exclude={ElasticsearchAutoConfiguration.class, RestClientAutoConfiguration.class})
2
Sankaran

例外を見ることによって

Java.lang.NoSuchMethodError: org.elasticsearch.client.RestHighLevelClient.<init>(Lorg/elasticsearch/client/RestClientBuilder;)

RestHighLevelClientには、<version>5.6.3</version>のパラメーターとしてRestClientBuilderをとるコンストラクターはありません。

バージョン<version>7.0.0-alpha1</version>を使用してみましたか?

更新:

例外An attempt was made to call the method org.elasticsearch.client.RestHighLevelClient.<init>(Lorg/elasticsearch/client/RestClientBuilder;は、コードがelasticsearchバージョン6に属するメソッドを実行しようとしていることを示します。あなたの場合、実行時にElasticsearchライブラリの複数のバージョンが提供されているか、コードがバージョン6に準拠している可能性があります。ただし、実行時にはバージョン5が提供されます。

0
Dushmantha