微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB Reactive Streams 运行时依赖错误与 Alpakka Mongo 连接器 ClassNotFoundException

如何解决MongoDB Reactive Streams 运行时依赖错误与 Alpakka Mongo 连接器 ClassNotFoundException

我正在尝试将 Alpakka Mongo Connector 集成到严重依赖 Akka libraries for stream processing 的应用程序中。该应用程序也使用 Akka HTTP
我在运行时遇到依赖问题。特别是,当我尝试使用 Mongo 连接器提供的 NoClassDefFoundError 方法时,我获得了某种成功/失败包装器的 MongoSink.insertOne。完整的堆栈跟踪:

java.lang.NoClassDefFoundError: com/mongodb/reactivestreams/client/Success
    at akka.stream.alpakka.mongodb.scaladsl.MongoFlow$.$anonfun$insertOne$1(MongoFlow.scala:44)
    at akka.stream.impl.fusing.Map$$anon$1.onPush(Ops.scala:53)
    at akka.stream.impl.fusing.GraphInterpreter.processpush(GraphInterpreter.scala:541)
    at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:423)
    at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorgraphInterpreter.scala:625)
    at akka.stream.impl.fusing.ActorgraphInterpreter$SimpleBoundaryEvent.execute(ActorgraphInterpreter.scala:56)
    at akka.stream.impl.fusing.ActorgraphInterpreter$SimpleBoundaryEvent.execute$(ActorgraphInterpreter.scala:52)
    at akka.stream.impl.fusing.ActorgraphInterpreter$BatchingActorInputBoundary$OnNext.execute(ActorgraphInterpreter.scala:95)
    at akka.stream.impl.fusing.GraphInterpreterShell.processEvent(ActorgraphInterpreter.scala:600)
    at akka.stream.impl.fusing.ActorgraphInterpreter.akka$stream$impl$fusing$ActorgraphInterpreter$$processEvent(ActorgraphInterpreter.scala:769)
    at akka.stream.impl.fusing.ActorgraphInterpreter$$anonfun$receive$1.applyOrElse(ActorgraphInterpreter.scala:784)
    at akka.actor.Actor.aroundReceive(Actor.scala:537)
    at akka.actor.Actor.aroundReceive$(Actor.scala:535)
    at akka.stream.impl.fusing.ActorgraphInterpreter.aroundReceive(ActorgraphInterpreter.scala:691)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:577)
    at akka.actor.ActorCell.invoke(ActorCell.scala:547)
    at akka.dispatch.MailBox.processMailBox(MailBox.scala:270)
    at akka.dispatch.MailBox.run(MailBox.scala:231)
    at akka.dispatch.MailBox.exec(MailBox.scala:243)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: java.lang.classNotFoundException: com.mongodb.reactivestreams.client.Success
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
... 24 more

依赖:

val akkaHttpVersion = "10.2.1"
val akkaVersion = "2.6.10"
val scalaTestVersion = "3.2.0"
val scalaHtmlScraperVersion = "2.2.0"
val loggerVersion = "1.2.3"
val alpakkamongoVersion = "2.0.2"

libraryDependencies ++= Seq(
  "org.mongodb.scala" %% "mongo-scala-driver" % "4.1.1","com.typesafe.akka" %% "akka-stream-typed" % akkaVersion,"com.typesafe.akka" %% "akka-http" % akkaHttpVersion,"com.typesafe.akka" %% "akka-http-spray-json" % akkaHttpVersion,"com.lightbend.akka" %% "akka-stream-alpakka-mongodb" % "2.0.2","ch.qos.logback" % "logback-classic" % loggerVersion,"org.scalactic" %% "scalactic" % scalaTestVersion,"org.scalatest" %% "scalatest" % scalaTestVersion,)

我也尝试添加 org.mongodb:mongodb-driver-reactivestreams:4.1.1 依赖项,但由于某种原因,com.mongodb.reactivestreams.client.Success 不是二进制文件的一部分。我也尝试了不同的版本。一些帮助肯定会受到赞赏。我正在使用 Scala 2.13.3

解决方法

您的问题与 Mongo Reactive Streams 驱动程序有关。 Alpakka 使用的版本有点旧(2019 年 8 月 13 日)。请参阅“直接依赖项”部分中的 Alpakka 文档:

org.mongodb mongodb-driver-reactivestreams 1.12.0

在那个 jar 中,您可以找到 Success 类:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。