gpt4 book ai didi

playframework - 如何使用 Akka 2.3.x 运行 Play 2.2.x?

转载 作者:行者123 更新时间:2023-12-03 01:52:39 25 4
gpt4 key购买 nike

有没有办法把akka 2.3和2.2结合起来玩?现在,我在运行此类应用程序时遇到 AbstractMethodError 。我需要将它们都放在一个应用程序中,因为 Akka 2.3 附带了非常有用的 akka 持久性模块,该模块非常可靠(与它的前身相反),这种可靠性对我来说非常重要。我尝试从源代码编译 play 2.2.2 并将 akka 依赖项更改为 2.3,但我仍然遇到相同的错误:

[ERROR] [04/01/2014 09:42:26.105] [play-akka.actor.default-dispatcher-6] [ActorSystem(play)] Uncaught error from thread [play-akka.actor.default-dispatcher-6] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled
java.lang.AbstractMethodError
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
at akka.actor.ActorCell.invoke(ActorCell.scala:487)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)
at akka.dispatch.Mailbox.run(Mailbox.scala:220)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

最佳答案

Akka 2.3 和 Play 2.2 只是二进制不兼容,这意味着您可以使用 Akka 2.3 作为依赖项来编译 Play 2.2,并将其发布到本地 ivy 或公司存储库。

就我而言,修补后的 Play 版本没有发生 AbstractMethodError。尝试用这种方式打补丁:

  1. 查看标记的 Play 版本的源代码,例如 https://github.com/playframework/playframework/releases/tag/2.2.2
  2. 切换到 framework 文件夹(即带有 project 子目录的 sbt 项目)
  3. 更改 Play 和 Akka 依赖项的版本号,例如 https://github.com/schleichardt/Play20/commit/14b45c44924ce5b3ef2159c772bc5b0544c94658
  4. sbtpublishLocalsbtpublish,对于后者你需要调整publishing{Ivy,Maven}Repository和publishMavenStyle := true framework/project/Build.scala
  5. (可选)除非您已将 Play 的补丁版本发布到本地 Ivy 存储库(使用 publishLocal),否则您需要将解析器添加到 build.sbtproject/plugins.sbt
  6. project/plugins.sbt 中设置已修补的 Play sbt 插件,例如 addSbtPlugin("com.typesafe.play"% "sbt-plugin"% "2.2.2-akka -2.3.1")

演示位于 https://github.com/schleichardt/event-sourcing-with-the-play-framework/tree/bf171720c43a1349555726cb11cffae4d967cc4b 。修补后的 Play 版本的源代码位于 https://github.com/schleichardt/Play20/tree/2.2.2-akka-2.3.1 .

另请参阅https://stackoverflow.com/a/22651261/1575096由于 Akka 2.3 编译的 Play 出现问题,Jeff May 无法使用 WS 库。

请记住,其他库(例如带有 Play iteratees 的 ReactiveMongo)也可能依赖于 Play 库,并且可能会将未修补的版本加载到类路径中。在这种情况下,诸如 "group"%% "library"% "version"except("com.typesafe.play", "play") 之类的内容会有所帮助。对于 ReactiveMongo,您还需要为 Akka 2.3 编译它。

使用sbt 'show libraryDependencies',您可以检查实际的依赖项及其版本。

关于playframework - 如何使用 Akka 2.3.x 运行 Play 2.2.x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22779882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com