【问题标题】:java.lang.NoClassDefFoundError: org/elasticsearch/search/aggregations/metrics/max/MaxAggregationBuilderjava.lang.NoClassDefFoundError: org/elasticsearch/search/aggregations/metrics/max/MaxAggregationBuilder
【发布时间】:2022-02-21 19:48:38
【问题描述】:

我正在将我的应用程序从 spring-boot 2.0 升级到 2.3,然后我发现这个关于弹性搜索的错误

java.lang.NoClassDefFoundError: org/elasticsearch/search/aggregations/metrics/max/MaxAggregationBuilder
    at java.lang.Class.getDeclaredConstructors0(Native Method) ~[na:1.8.0_111]
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) ~[na:1.8.0_111]
    at java.lang.Class.getDeclaredConstructors(Class.java:2020) ~[na:1.8.0_111]
    at org.springframework.boot.context.properties.ConfigurationPropertiesBindConstructorProvider.findConstructorBindingAnnotatedConstructor(ConfigurationPropertiesBindConstructorProvider.java:62) ~[spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.boot.context.properties.ConfigurationPropertiesBindConstructorProvider.getBindConstructor(ConfigurationPropertiesBindConstructorProvider.java:48) ~[spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.boot.context.properties.ConfigurationPropertiesBean$BindMethod.forType(ConfigurationPropertiesBean.java:311) ~[spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.boot.context.properties.ConfigurationPropertiesBeanDefinitionValidator.validate(ConfigurationPropertiesBeanDefinitionValidator.java:63) ~[spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.boot.context.properties.ConfigurationPropertiesBeanDefinitionValidator.postProcessBeanFactory(ConfigurationPropertiesBeanDefinitionValidator.java:45) ~[spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:291) ~[spring-context-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:175) ~[spring-context-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:706) ~[spring-context-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) [spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.0.RELEASE.jar!/:2.3.0.RELEASE]
    at com.lms.firebaseNotification.FireBaseNotification.main(FireBaseNotification.java:22) [classes!/:0.0.1-SNAPSHOT]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_111]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_111]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111]
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) [app.jar:0.0.1-SNAPSHOT]
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:109) [app.jar:0.0.1-SNAPSHOT]
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) [app.jar:0.0.1-SNAPSHOT]
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) [app.jar:0.0.1-SNAPSHOT]
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.search.aggregations.metrics.max.MaxAggregationBuilder
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_111]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_111]
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:129) ~[app.jar:0.0.1-SNAPSHOT]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_111]
    ... 28 common frames omitted

当我在网上搜索时,我找到了this question,但我的情况有点不同,我没有在代码中的任何地方明确使用MaxAggregationBuilder,因此它可能隐藏在抽象的某个地方。

注意:我没有明确指定spring-data-elasticserch 的版本,我知道它应该是4.x,但我把它留给了spring boot parent,所以我不认为这是一个依赖问题,但我不知道。

【问题讨论】:

  • 你更新的不是Spring,而是Spring Boot。

标签: java spring spring-boot elasticsearch spring-data-elasticsearch


【解决方案1】:

Spring Data Elasticsearch 本身不会在其代码中构建任何聚合,因此在创建 NativeSearchQuery 时必须在其他地方引用它 - 这是在 Spring Data Elasticsearch 中构建聚合请求的唯一方法。您是否包含其他可能会创建一些请求的库?
顺便说一句,请求的类在包org.elasticsearch.search.aggregations.metrics中。

Spring Boot 2.0 使用 Spring Data Elasticsearch 3.0.x 和 Elasticsearch 5.5.0,而 Spring Boot 2.3 使用 Spring Data Elasticsearch 4.0.x 和 Elasticsearch 7.6。我想这个包在 5.5 和 7.6 期间在 Elasticsearch 中发生了变化。

【讨论】:

  • 感谢@P.J.Meisch,但为什么错误是运行时错误而不是编译时或弃用警告我曾经使用NativeSearchQuery 进行通配符查询我不认为这应该是与MaxAggregationBuilder相关
  • 这个查询肯定有一些代码构建的,而这个在Spring Data Elasticsearch中是没有的,所以你必须找到构建查询的地方
猜你喜欢
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 2013-01-10
相关资源
最近更新 更多