2015-10-20 16 views
5

Sto cercando di integrare del codice esistente con lo play framework. Ho scaricato il 1.3.6 minimal Typesafe Activator package. Ho creato un progetto play-java e modificato il file build.sbt con queste righe:Versione di Akka in Playframework

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

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

Ho poi aggiunto un riferimento a una delle mie classi esistenti in Application.java. Quando ho eseguito activator run, ha scaricato un numero elevato di jar, compreso quello che avevo aggiunto manualmente e compilato correttamente il codice.

Quando si tenta di eseguire, ottengo un errore:

$ ./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) 

Guardando i numeri di versione, credo che questo è dovuto al fatto che stiamo usando Akka-attore-2.4.0 RC2, mentre attivatore sta usando 2.3. C'è un modo per far sì che l'attivatore usi il 2.4? O devo aspettare una nuova versione di attivatore?

Ho provato ad aggiungere

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

al libraryDependencies, ma che ha dato un avvertimento circa una dipendenza sfrattato e la stessa classe non trovato errore.

Non ho molta familiarità con l'interazione tra play e activator. Se c'è un modo per fare questo lavoro eliminando uno di essi senza aggiungere un sacco di lavoro aggiuntivo, va bene anche questo.

risposta

7

Non penso che sia il problema con la versione. Sembra il problema con Slf4j.

tenta di aggiungere Akka-slf4j dentro al built.sbt:

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

Aggiornamento

Per l'attore Akka 2.4.0 è necessario aggiungere 2.4.0 versione di slf4j:

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

Questa linea non ha aiutato. Anche senza di esso, lo vedo nell'output: '[info] Risoluzione di com.typesafe.akka # akka-slf4j_2.11; 2.3.13 ... ', che indica che akka-slf4j è già stato caricato (e versione successiva anche). Questa riga: 'libraryDependencies + =" com.typesafe.akka "%%" akka-slf4j "%" 2.4.0 "', ha funzionato. Aveva anche un avvertimento sullo sfratto del 2.3.13 akka-slf4j. –

+0

Grazie per il commento - Ho aggiornato la risposta per qualcuno che guarderà dopo –

+0

Infatti la versione akka-slf4j deve corrispondere ... Mi chiedo perché questo non fa parte di ciò che viene implementato con il modello di attivatore .. .. – matanster