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