2016-11-02 84 views
1

我一直在關注QuickStart guide for Akka Streams,我遇到了一個錯誤。我的代碼很簡單:Akka無法啓動演員系統

object Main extends App { 
    implicit val system = ActorSystem("QuickStart") 
    implicit val materializer = ActorMaterializer() 

    val source: Source[Int, NotUsed] = Source(1 to 100) 
    source.runForeach(i => println(i)) (materializer) 
} 

然而這將導致一個錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: scala/Product$class at akka.util.Timeout.(Timeout.scala:13) at akka.actor.ActorSystem$Settings.(ActorSystem.scala:179) at akka.actor.ActorSystemImpl.(ActorSystem.scala:530) at akka.actor.ActorSystem$.apply(ActorSystem.scala:142) at akka.actor.ActorSystem$.apply(ActorSystem.scala:109) at streams_test.Main$.delayedEndpoint$streams_test$Main$1(Main.scala:14) at streams_test.Main$delayedInit$body.apply(Main.scala:13) at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) at scala.App.$anonfun$main$1$adapted(App.scala:76) at scala.collection.immutable.List.foreach(List.scala:378) at scala.App.main(App.scala:76) at scala.App.main$(App.scala:74) at streams_test.Main$.main(Main.scala:13) at streams_test.Main.main(Main.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:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) Caused by: java.lang.ClassNotFoundException: scala.Product$class at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 19 more

我也嘗試過,沒有運氣的SBT控制檯運行它。有誰知道是什麼原因造成這個問題?這是在該行被扔:

implicit val system = ActorSystem("QuickStart") 

按照要求,我build.sbt文件:

name := "Akka_test" 

version := "1.0" 

scalaVersion := "2.12.0" 

// https://mvnrepository.com/artifact/com.typesafe.akka/akka-actor_2.11 
libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.3.9" 
// https://mvnrepository.com/artifact/com.typesafe.akka/akka-stream_2.11 
libraryDependencies += "com.typesafe.akka" % "akka-stream_2.11" % "2.4.12" 
// https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core 
libraryDependencies += "org.twitter4j" % "twitter4j-core" % "4.0.2" 
+3

這可能是Scala版本問題,你可能使用2.10編譯庫與2.11編譯器或反之亦然 – pamu

+2

你可以請粘貼你的'build.sb t'文件呢? – pamu

+0

有時它會在'java'而不是'scala'運行編譯類時發生。您可以在打包的jar上使用'java',但默認情況下'java'不會在類路徑上放置scala庫。 –

回答

6

這可能是你可能會使用2.10編譯庫2.11編譯器或反之亦然斯卡拉版本問題。

可避免遇到的問題,如果你有明確的Scala版本build.sbt和build.sbt使用%%的groupId後

使用本

scalaVersion := "scala_version" 

libraryDependencies += "group_id" %% "artificat_id" % "version" 

代替

libraryDependencies += "group_id" % "artificat_id_scala_version" % "version"