RemoteActorRefProvider ClassNotFound

时间:2013-11-15 19:33:03

标签: java scala akka

我正在努力尝试在Scala中设置远程演员。我正在运行Scala 2.10.2和Akka 2.2.1。

我使用[我为了清晰起见缩短了类路径arg上的路径]编译:

$ scalac -classpath "akka-2.2.1/lib:akka-2.2.1/lib/scala-library.jar:akka-2.2.1/lib/akka:akka-2.2.1/lib/akka/scala-reflect-2.10.1.jar:akka-2.2.1/lib/akka/config-1.0.2.jar:akka-2.2.1/lib/akka/akka-remote_2.10-2.2.1.jar:akka-2.2.1/lib/akka/akka-kernel_2.10-2.2.1.jar:akka-2.2.1/lib/akka/akka-actor_2.10-2.2.1.jar:." [file.scala]

我不断添加新的库试图调试这个 - 我很确定我真正需要包含的是akka-remote,但其他人不应该受到伤害。

没有问题编译。

我试图像这样跑:

$ scala -classpath "[same as above]" [application]

我收到NSM例外:

java.lang.NoSuchMethodException: akka.remote.RemoteActorRefProvider.<init>(java.lang.String, akka.actor.ActorSystem$Settings, akka.event.EventStream, akka.actor.Scheduler, akka.actor.DynamicAccess)
at java.lang.Class.getConstructor0(Class.java:2810)
at java.lang.Class.getDeclaredConstructor(Class.java:2053)
...

查看源代码,看来Akka 2.2.X的这个构造函数的味道需要4个参数(调度程序被删除)。但是在Akka&lt; 2.2.X,构造函数需要5个参数。

因此,我认为我的类路径设置得不是很正确。在编译时,Scala必须找到&lt; 2.2.X风格。我甚至不知道它会在哪里找到它,因为我只安装了Akka 2.2.1。

有什么建议!?谢谢! (请不要说使用SBT)。

2 个答案:

答案 0 :(得分:4)

这里的问题是Scala发行版包含akka-actor 2.1.0并且有助于将它放在引导类路径中。我们强烈建议在构建超出最琐碎项目的任何东西时使用像sbt或maven这样的依赖管理器。

答案 1 :(得分:0)

正如另一个答案所述,问题是scala将不同版本的Akka放入bootclasspath。

要更直接地回答您的问题(正如您所说,您不想使用sbt):您可以使用java代替scala来执行您的程序。您只需将相应的Scala jar放入类路径中即可。

这是spark-dev message about the problem。重要的部分是:&#34;解决方法是使用java来启动应用程序而不是scala。您需要做的就是在类路径中包含正确的Scala jar(scala-library和scala-compiler)。&#34;