java - Playframework 中的 Akka 版本

标签 java playframework-2.0 akka typesafe-activator

我正在尝试将一些现有代码与 play framework 集成.我下载了 1.3.6 minimal Typesafe Activator package .我创建了一个 play-java 项目并修改了 build.sbt 文件包含这些行:

resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"

libraryDependencies ++= Seq(
  "com.xxx" % "messages" % "0.0.1-SNAPSHOT"
)

然后我在 Application.java 中添加了对我现有类之一的引用。当我运行 activator run 时,它下载了大量的 jar,包括我手动添加并成功编译代码的那个。

当它尝试运行时,出现错误:

$ ./activator run
[info] Loading project definition from <APP_ROOT>/project
[info] Set current project to my-proj (in build file:<APP_ROOT>)

--- (Running the application, auto-reloading is enabled) ---

java.lang.ClassNotFoundException: akka.event.slf4j.Slf4jLoggingFilter
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at akka.actor.ReflectiveDynamicAccess$$anonfun$getClassFor$1.apply(DynamicAccess.scala:67)
    at akka.actor.ReflectiveDynamicAccess$$anonfun$getClassFor$1.apply(DynamicAccess.scala:66)
    at scala.util.Try$.apply(Try.scala:192)
    at akka.actor.ReflectiveDynamicAccess.getClassFor(DynamicAccess.scala:66)
    at akka.actor.ReflectiveDynamicAccess.createInstanceFor(DynamicAccess.scala:84)
    at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:612)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:143)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:127)
    at play.api.libs.concurrent.ActorSystemProvider$.start(Akka.scala:291)
    at play.core.server.DevServerStart$$anonfun$mainDev$1.apply(DevServerStart.scala:205)
    at play.core.server.DevServerStart$$anonfun$mainDev$1.apply(DevServerStart.scala:61)
    at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
    at play.core.server.DevServerStart$.mainDev(DevServerStart.scala:60)
    at play.core.server.DevServerStart$.mainDevHttpMode(DevServerStart.scala:50)
    at play.core.server.DevServerStart.mainDevHttpMode(DevServerStart.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at play.runsupport.Reloader$.startDevMode(Reloader.scala:223)
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.devModeServer$lzycompute$1(PlayRun.scala:74)
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.play$sbt$run$PlayRun$$anonfun$$anonfun$$anonfun$$devModeServer$1(PlayRun.scala:74)
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.apply(PlayRun.scala:100)
    at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.apply(PlayRun.scala:53)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)

看版本号,我想这是因为我们用的是akka-actor 2.4.0-RC2,而activator用的是2.3。有没有办法让激活器使用 2.4?还是我需要等待新版本的激活器?

我尝试添加

  "com.typesafe.akka" % "akka-actor_2.11" % "2.4.0-RC2"

libraryDependencies,但它给出了有关已驱逐的依赖项和未找到同一类错误的警告。

我不太熟悉playactivator 之间的交互。如果有一种方法可以通过摆脱其中一个而不增加很多额外的工作来完成这项工作,那也很好。

最佳答案

我觉得不是版本问题。看起来像是 Slf4j 的问题。

尝试将 akka-slf4j 添加到 built.sbt 中:

 libraryDependencies += "com.typesafe.akka" %% "akka-slf4j" % "2.3.6"

更新

对于akka actor 2.4.0你需要添加2.4.0版本的slf4j:

 libraryDependencies += "com.typesafe.akka" %% "akka-slf4j" % "2.4.0"

关于java - Playframework 中的 Akka 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33248524/

相关文章:

scala - 如何在 Play 2 中从 ReactiveMongo 返回 JSON 的枚举器

scala - Play框架中基于查询参数的路由

templates - 如何在 Play! 中加载和渲染模板2.0?

scala - scala/akka 或 go 更适合的问题

java - 如何以与文件夹中存在的顺序相同的顺序获取文件?

java - 如何使用 Commons compress 打包太大并导致内存不足崩溃的文件?

web - 如何在分布式系统中部署akka,实现高可用?

scala - RoundRobinPool 和 RoundRobinRouter 有什么区别

java - 列表java中的任意数量的列表

java - 使用 jcabi 将参数传递给 XSL 文件