【问题标题】:NoClassDefFoundError error creating RestHighLevelClient beanNoClassDefFoundError 创建 RestHighLevelClient bean 时出错
【发布时间】:2018-04-01 23:14:55
【问题描述】:

在 SpringBoot 应用程序中创建 HighEndRestClient bean 时出错。我已经完成了一个测试“应用程序”,我在其中检查了我可以实例化我想要的对象,然后进行我想要的调用,现在我正在逐步创建一个新的应用程序。

我在 pom 中有这些依赖项

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

我已经在一个配置类中编写了这个非常基本的代码,它还没有做太多

@Configuration
@PropertySource(value = "classpath:application.properties")
@EnableElasticsearchRepositories(basePackages = "com.indexbuilder.es.repo")
public class ElasticsearchConfiguration {
    @Value("${elasticsearch.host}")
    private String EsHost;

    @Value("${elasticsearch.port}")
    private int EsPort;

    @Value("${elasticsearch.clustername}")
    private String EsClusterName;


    @Bean
    public RestClientBuilder coreBuilder() throws Exception {
        RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
        builder.setMaxRetryTimeoutMillis(10000);

        builder.setFailureListener(new RestClient.FailureListener() {
            @Override
            public void onFailure(HttpHost host) {
                System.out.println("FAILURE !!!! FailureListener HAS WOKEN UP!!!! CREATYE A FAILURE LISTENER BEAN" );
            }
        });

        return builder;
      }

    @Bean
    public RestClient restLowLevelClient() throws Exception{
        RestClient restClient = coreBuilder().build();
        return restClient;
    }

据我所知,这很好用(我还没有做太多...)

当我添加这个时(最初我传递的是 RestClient bean,但现在我临时创建一个本地对象以更清晰)

    @Bean
    public RestHighLevelClient restHighLevelClient() throws Exception{
        RestClient restClient = coreBuilder().build();
        RestHighLevelClient client = new RestHighLevelClient(restClient);
        return client;
    }

我得到这个 java.lang.NoClassDefFoundError 错误

=========|_|==============|___/=///_/ :: Spring Boot : : (v1.5.1.RELEASE)

[警告] java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:527) 在 java.lang.Thread.run(Thread.java:745) 引起: org.springframework.beans.factory.BeanCreationException:错误 创建在类路径中定义的名称为“restHighLevelClient”的bean 资源 [com/indexbuilder/configuration/ElasticsearchConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.elasticsearch.client.RestHighLevelClient]:工厂 方法“restHighLevelClient”抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/elasticsearch/action/main/MainRequest 在 org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:598) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1140) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1034) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:525) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:744) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 在 org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:314) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) 在 com.indexbuilder.SpringBootStartUpConfig.main(SpringBootStartUpConfig.java:84) ... 6 更多原因: org.springframework.beans.BeanInstantiationException:失败 实例化 [org.elasticsearch.client.RestHighLevelClient]:工厂 方法“restHighLevelClient”抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/elasticsearch/action/main/MainRequest 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 在 org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:587) ... 24 更多原因:java.lang.NoClassDefFoundError: org/elasticsearch/action/main/MainRequest 在 com.indexbuilder.configuration.ElasticsearchConfiguration.restHighLevelClient(ElasticsearchConfiguration.java:95) 在 com.indexbuilder.configuration.ElasticsearchConfiguration$$EnhancerBySpringCGLIB$$62f74d9a.CGLIB$restHighLevelClient$1() 在 com.indexbuilder.configuration.ElasticsearchConfiguration$$EnhancerBySpringCGLIB$$62f74d9a$$FastClassBySpringCGLIB$$2b29ad7b.invoke() 在 org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 在 org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) 在 com.indexbuilder.configuration.ElasticsearchConfiguration$$EnhancerBySpringCGLIB$$62f74d9a.restHighLevelClient() 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ... 25 更多原因:java.lang.ClassNotFoundException: org.elasticsearch.action.main.MainRequest 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 36 更多

谁能指出我正确的方向?

【问题讨论】:

    标签: java spring elasticsearch


    【解决方案1】:

    我遇到了同样的问题。 ElasticSearch 指向旧版本:

    org.elasticsearch:elasticsearch:6.2.3 -> 1.5.2
    

    我使用dependencyManagement gradle插件强制使用我提到的版本:

    dependencyManagement {
    dependencies {
        dependency 'org.elasticsearch:elasticsearch:6.2.3'
    }}
    

    欲了解更多信息:https://github.com/spring-gradle-plugins/dependency-management-plugin

    【讨论】:

      【解决方案2】:

      您可能还需要核心依赖项:

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

      NoClassDefFoundError 通常是配置错误 - 这意味着您使用的代码引用了某个类,但该类本身不在类路径中。在这种情况下,这也可能是相关 Elasticsearch poms 本身中的依赖管理错​​误,因为它们应该包含所需的类 - 但除了提交问题之外,您无能为力。

      【讨论】:

      • 我遇到了同样的问题。由于某种原因,spring boot 具有托管的 elasticsearch 2.x 依赖项。
      • 完美.. 谢谢!!
      • 注意:所有依赖之间的版本应该相同,版本不匹配我得到了同样的错误。
      猜你喜欢
      • 2012-12-16
      • 1970-01-01
      • 2016-06-24
      • 2017-08-20
      • 2013-10-06
      • 2015-06-29
      • 2018-04-07
      • 2017-09-24
      • 1970-01-01
      相关资源
      最近更新 更多