【问题标题】:Elasticsearch TransportClient NetworkPlugin NoClassDefFoundErrorElasticsearch TransportClient NetworkPlugin NoClassDefFoundError
【发布时间】:2017-04-25 01:38:30
【问题描述】:

我期待将 Elasticsearch 集成到 Spring Boot Web 应用程序中。这是创建传输客户端的配置:

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

希望你能帮助我

【问题讨论】:

    标签: spring elasticsearch spring-boot client transport


    【解决方案1】:

    我只是偶然发现了同样的问题。似乎 Elasticsearch 文档不完整。除了传输客户端依赖外,还需要添加elasticsearch依赖:

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

    您还需要 log4j 依赖项,但这在 Elasticsearch docs 中有明确说明。

    【讨论】:

    • 您好我收到 java.lang.NoSuchFieldError: defaultConnectionProfile java.lang.NoSuchFieldError: defaultConnectionProfile at org.elasticsearch.transport.netty4.Netty4Transport.createBootstrap(Netty4Transport.java:207) ...你能不能在此提出一些建议
    【解决方案2】:

    对我来说,弹性搜索似乎在 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 ?!

    最好的问候, 诺拉比斯

    【讨论】:

      【解决方案3】:

      正如 Elasticsearch Github 页面上的this issue 中所述,SpringBoot starter 管理一些默认依赖项,这些依赖项定义了 ElasticSearch 的默认版本低于 5.1.1,因此没有这样的类。

      您可以在自己的 pom 中显式定义该属性以覆盖其定义。

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

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        • 2017-05-04
        相关资源
        最近更新 更多