2015-10-20 43 views
5

我正在嘗試將一些現有的代碼與play framework集成。我下載了1.3.6 minimal Typesafe Activator package。我創建了一個play-java項目並修改了 build.sbt文件與這些線路:Playframework中的Akka版本

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文件,其中包括我手動添加併成功編譯代碼的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) 

看着版本號,我想這是因爲我們使用的是阿卡 - 演員2.4.0-RC2,同時激活使用2.3。有沒有辦法讓激活者使用2.4?或者我需要等待新版本的激活器?

我嘗試添加

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

libraryDependencies,但其產生的關於驅逐的依賴,而不是發現錯誤同一類的警告。

我不太熟悉playactivator之間的相互作用。如果有一種方法可以通過擺脫其中一項而不增加大量額外工作來完成這項工作,那也沒有問題。

回答

7

我不認爲這是版本的問題。它看起來像Slf4j的問題。

嘗試在添加阿卡-SLF4J到built.sbt

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

更新

對於阿卡演員2.4.0你需要添加2.4.0版本SLF4J的:

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

該行沒有幫助。即使沒有它,我在輸出中看到:[info]正在解析com.typesafe.akka#akka-slf4j_2.11; 2.3.13 ... ',這表示akka-slf4j已經被加載(和後來的版本甚至)。這行:'libraryDependencies + =「com.typesafe.akka」%%「akka-slf4j」%「2.4.0」',確實使它工作。它還有關於驅逐2.3.13 akka-slf4j的警告。 –

+0

感謝您的評論 - 我確實更新了以後會看到的人的答案 –

+0

事實上,akka-slf4j版本需要匹配......我想知道爲什麼這不是使用激活模板部署的部分。 .. – matanster

相關問題