【问题标题】:getting NoClassDefFoundError using elastic4s使用 elastic4s 获取 NoClassDefFoundError
【发布时间】:2018-05-08 20:36:10
【问题描述】:

我在我的应用中使用play 2.6scala 2.12,并使用elastic4s 进行弹性搜索。

在我的build.sbt

"com.sksamuel.elastic4s" %% "elastic4s-core" % "5.6.0",
"com.sksamuel.elastic4s" %% "elastic4s-http" % "5.6.0",

我的日志中不断出现这个异常:

Exception in thread "I/O dispatcher 16" java.lang.NoClassDefFoundError: Could not initialize class com.sksamuel.elastic4s.http.JacksonSupport$
    at com.sksamuel.elastic4s.http.ResponseHandler$.fromEntity(ResponseHandler.scala:47)
    at com.sksamuel.elastic4s.http.DefaultResponseHandler.$anonfun$onResponse$1(ResponseHandler.scala:55)
    at scala.util.Try$.apply(Try.scala:209)
    at com.sksamuel.elastic4s.http.DefaultResponseHandler.onResponse(ResponseHandler.scala:55)
    at com.sksamuel.elastic4s.http.HttpExecutable$RichRestClient$$anon$1.onSuccess(HttpExecutable.scala:27)
    at org.elasticsearch.client.RestClient$FailureTrackingResponseListener.onSuccess(RestClient.java:597)
    at org.elasticsearch.client.RestClient$1.completed(RestClient.java:352)
    at org.elasticsearch.client.RestClient$1.completed(RestClient.java:343)
    at org.apache.http.concurrent.BasicFuture.completed(BasicFuture.java:119)
    at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.responseCompleted(DefaultClientExchangeHandlerImpl.java:177)
    at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.processResponse(HttpAsyncRequestExecutor.java:436)
    at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.inputReady(HttpAsyncRequestExecutor.java:326)
    at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:265)
    at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
    at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
    at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114)
    at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
    at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
    at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:588)
    at java.lang.Thread.run(Thread.java:748)

试图找出可能导致这种情况的原因。

在另一个日志中也看到了:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Scala module 2.8.8 requires Jackson Databind version >= 2.8.0 and < 2.9.0

所以它看起来像杰克逊版本的东西,或者杰克逊版本的东西,但不确定我在哪里更新它或者它到底在哪里失败......

有人遇到过这个问题吗? 谢谢!

【问题讨论】:

    标签: scala elasticsearch playframework jackson


    【解决方案1】:

    仔细检查您是否正在导入elastic4s-jackson

    libraryDependencies += "com.sksamuel.elastic4s" %% "elastic4s-jackson" % "5.6.0" 
    

    【讨论】:

    • 我使用了elastic4s,不记得从来没有处理过elastic4s-jackson...?那可能吗?我以前的应用程序版本使用的是相同的东西,但这个版本我将 scala 升级到 2.12,是不是有什么改变了,现在我需要它?
    【解决方案2】:

    我在使用 jackson 模块的 play 2.8 和 elastic4s 6.7.3 也遇到了完全相同的问题 帮助我的是运行 evicted 并查看每个库所具有的依赖项并找出它为什么无法加载该特定类。最终升级到 6.7.8 最终解决了这个问题。 此外,如果您查看 elasic4s 项目的 buid.sbt 文件,它会列出它使用的所有版本https://github.com/sksamuel/elastic4s/blob/master/build.sbt

    【讨论】:

      【解决方案3】:

      您可以使用 jackson-module-scala 并排除在 elastic4s-http 中引用的 com.fasterxml.jackson,并在应用程序运行时验证 com.fasterxml.jackson 在库/类路径中是否可用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-18
        • 2015-08-16
        • 1970-01-01
        • 2011-11-05
        • 2020-03-16
        • 2012-07-29
        相关资源
        最近更新 更多