我在SpringBoot应用程序中创建HighEndRestClient bean时遇到错误 . 我已经完成了一个测试'app',我检查了我可以实例化我想要的对象,然后拨打我想要的电话,现在我正在制作新的应用程序 .
我在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)[警告]在sun.reflect.DeativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)中的java.lang.reflect.InvocationTargetException )at java.lang.ref.Modod.unvoke(Method.java:498)atg.springframework.boot.maven.AbstractRunMojo $ LaunchRunner.run(AbstractRunMojo.java:527)at java.lang.Thread.run(Thread . java:745)引起:org.springframework.beans.factory.BeanCreationException:在类路径资源[com / indexbuilder / configuration / ElasticsearchConfiguration.class]中定义名称为'restHighLevelClient'的bean创建错误:通过工厂方法进行Bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.elasticsearch.client.RestHighLevelClient]:工厂方法'restHighLevelClient'抛出异常;嵌套异常是org.springframework.beans.factory.support中的org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:598)中的java.lang.NoClassDefFoundError:org / elasticsearch / action / main / MainRequest . 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的org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:304)的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) . beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingl etonBeanRegistry.java:230)org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)at org位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)的.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:744)org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:542)位于org.springframework的org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) . 在org.spring的org.springframework.boot.SpringApplication.run(SpringApplication.java:314)的boot.SpringApplication.refreshContext(SpringApplication.java:370) framework.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'抛出异常;嵌套异常是org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)中的java.lang.NoClassDefFoundError:org / elasticsearch / action / main / MainRequestorg.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:587)... 24更多引起:java.lang.NoClassDefFoundError:org / elasticsearch / action / main / MainRequest at com.indexbuilder.configuration . ElasticsearchConfiguration.restHighLevelClient(ElasticsearchConfiguration.java:95)at com.indexbuilder.configuration.ElasticsearchConfiguration $$ EnhancerBySpringCGLIB $$ 62f74d9a.CGLIB $ restHighLevelClient $ 1()at com.indexbuilder.configuration.ElasticsearchConfiguration $$ EnhancerBySpringCGLIB $$ 62f74d9a $$ FastClassBySpringCGLIB $$ 2位于org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)的b29ad7b.invoke()位于com.indexbuilder的org.springframework.context.annotation.ConfigurationClassEnhancer $ BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) . configuration.ElasticsearchConfiguration $$ EnhancerBySpringCGLIB $$ 62f74d9a.restHighLevelClient()at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at su n.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)atg.springframework上的java.lang.reflect.Method.invoke(Method.java:498)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) .beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)... 25更多引起:java.lang.ClassNotFoundException:org.elasticsearch.action.main.MainRequest at java.net.URLClassLoader.findClass(URLClassLoader .java:381)java.lang.ClassLoader.loadClass(ClassLoader.java:424)java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 36更多
谁能指出我正确的方向?
2 回答
您可能还需要核心依赖项:
NoClassDefFoundError
通常是配置错误 - 这意味着您使用的代码引用了某个类,但是类本身并不是您可以做的事情,除了可能提出问题 .我有同样的问题 . ElasticSearch指向旧版本:
我使用了dependencyManagement gradle插件来强制使用我提到的版本:
欲了解更多信息:https://github.com/spring-gradle-plugins/dependency-management-plugin