我正在努力尝试在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个参数( Scheduler被移除)。但在Akka < 2.2.X中,构造函数采用5个args。
因此,我认为我的类路径设置不太正确。在编译时,Scala必须找到<2.2.X风格。我甚至不知道它会在哪里找到它,因为我只安装了Akka 2.2.1。
有什么建议吗?谢谢!(请不要说使用SBT)。
发布于 2013-11-16 06:39:04
这里的问题是Scala发行版包含Akka-active2.1.0,并且为您将其放在引导类路径中是有帮助的。我们强烈建议在构建任何超出最重要项目的内容时,使用像sbt或maven这样的依赖管理器。
发布于 2016-01-08 19:53:59
正如另一个答案所指出的,问题是scala在引导路径中放置了不同版本的Akka。
要更直接地回答您的问题(正如您所说的,您不想使用sbt):您可以使用java而不是scala来执行您的程序。您只需将适当的Scala罐子放入类路径。
这是一个关于这个问题的消息。重要的部分是:“解决方法是使用java来启动应用程序,而不是scala,您所需要做的就是在类路径中包含正确的Scala jars (scala库和scala编译器)。”
https://stackoverflow.com/questions/20009133
复制相似问题