Исключение java.lang.NoSuchMethodError при попытке закрыть клиент ElasticSearch

Когда я пытаюсь закрыть клиент ElasticSearch с помощью Java API 6.0, я получаю следующее исключение при вызове client.close():

Exception in thread "elasticsearch[_client_][generic][T#1]" java.lang.NoSuchMethodError: io.netty.bootstrap.Bootstrap.config()Lio/netty/bootstrap/BootstrapConfig;
at org.elasticsearch.transport.netty4.Netty4Transport.lambda$stopInternal$7(Netty4Transport.java:390)
at org.apache.lucene.util.IOUtils.close(IOUtils.java:89)
at org.elasticsearch.common.lease.Releasables.close(Releasables.java:36)
at org.elasticsearch.common.lease.Releasables.close(Releasables.java:46)
at org.elasticsearch.common.lease.Releasables.close(Releasables.java:51)
at org.elasticsearch.transport.netty4.Netty4Transport.stopInternal(Netty4Transport.java:373)
at org.elasticsearch.transport.TcpTransport.lambda$doStop$14(TcpTransport.java:927)
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:569)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Я использую точно такой же код, который представлен в качестве примера в документация Java API 6.0 для ElasticSearch:

        // on startup
    TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300));

    // on shutdown
    client.close();

person user3352382    schedule 27.11.2017    source источник


Ответы (2)


NoSuchMethodError указывает на проблему с вашими зависимостями. Документация Java API 6.0 указывает на эту зависимость maven:

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

Транзитивная зависимость вышеприведенного:

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport</artifactId>
    <version>4.1.13.Final</version>
</dependency>

В версии 4.1.13.Final класс io.netty.bootstrap.Bootstrap имеет метод config() с возвращаемым значением BootstrapConfig:

public final BootstrapConfig config()
  {
    return this.config;
  }

Пожалуйста, проверьте с помощью mvn dependency:tree, что вы используете правильную версию io.netty:netty-transport.

person siom    schedule 27.11.2017
comment
В моем файле pom.xml у меня есть следующие зависимости: <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>6.0.0</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-transport</artifactId> <version>4.1.13.Final</version> </dependency> - person user3352382; 27.11.2017
comment
Ответ Per siom, вам нужно использовать mvn dependency:tree и точно видеть, что решает maven, а не просто доверять тому, что вы настроили. - person Tim; 28.11.2017

Я столкнулся с теми же проблемами при запуске моего тестового кода при использовании es 5.5.1. Я решил это, добавив зависимость maven ниже:

io.netty netty-all 4.1.25.Финальный тест

person myitroad    schedule 28.05.2018