【问题标题】:ClassNotFoundException on akka.remote.RemoteActorRefProviderakka.remote.RemoteActorRefProvider 上的 ClassNotFoundException
【发布时间】:2013-09-15 22:00:28
【问题描述】:

我正在尝试使用 Akka 演员在 scala 中的远程演员之间进行通信。我的程序在 scala IDE 中运行良好,但我无法从命令提示符运行它。在我的项目文件夹中,我有 application.conf 文件、scala 文件和 akka-remote_2.10-2.2.2.jar 文件。我正在编译我的程序如下

scalac -cp akka-remote_2.10-2.2.2.jar FileName.scala

程序编译,然后我运行如下

scala FileName

我收到以下错误

java.lang.ClassNotFoundException: akka.remote.RemoteActorRefProvider
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at akka.actor.ReflectiveDynamicAccess$$anonfun$getClassFor$1.apply(Dynam
icAccess.scala:68)
    at akka.actor.ReflectiveDynamicAccess$$anonfun$getClassFor$1.apply(Dynam
icAccess.scala:67)
    at scala.util.Try$.apply(Try.scala:161)
    at akka.actor.ReflectiveDynamicAccess.getClassFor(DynamicAccess.scala:67
)
    at akka.actor.ReflectiveDynamicAccess.createInstanceFor(DynamicAccess.sc
ala:85)
    at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:546)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:111)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:93)
    at Project1Bonus2$.main(Project1Bonus2.scala:11)
    at Project1Bonus2.main(Project1Bonus2.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClass
Loader.scala:71)
    at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoade
r.scala:31)
    at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaC
lassLoader.scala:139)
    at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scal
a:71)
    at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLo
ader.scala:139)
    at scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:28)
    at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:45)
    at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:35)

    at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:45)
    at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala
:74)
    at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:96)

    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:105)
    at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

我的application.conf文件如下。

akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "127.0.0.1"
port = 9001
}
}
}

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 另外,使用 scala -cp akka-remote_2.10-2.2.2.jar FileName 运行程序也会出现同样的异常。
  • 请发布scala -cp akka-remote_2.10-2.2.2.jar的完整例外
  • 您是否将 akka-remote_2.10-2.2.2.jar 添加到 CLASSPATH 中?
  • @1esha 它给出了与上面相同的异常..
  • 我在运行 Spark(使用 akka)时看到了同样的错误。有几篇关于它的帖子,包括这个,没有一个显示它已解决。

标签: java eclipse scala


【解决方案1】:

这里的问题是 Scala 发行版默认在其引导类路径中包含 akka-actor 2.X.X。因此,您的代码中 scalacscala 使用的不同。

解决方法是使用 java 而不是 scala 来启动应用程序。您需要做的就是在类路径中包含正确的 Scala jar(scala-library 和 scala-compiler)。

java -cp akka-remote_2.10-2.2.2.jar FileName.scala

会有很多 jar 依赖,例如 akka-actor 等。

因此,使用 SBT 或将所有 jar 放在一个文件夹中,然后将该文件夹添加到类路径中。

java -cp ./jars/*:. FileName.scala

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2023-03-21
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多