Scala akka actor系统 - 加载扩展名

时间:2017-05-23 14:54:19

标签: scala akka actor

我是scala的新手,我遇到了以下问题。

import akka.actor.Actor
import akka.actor.Props
import akka.event.Logging
import akka.actor.ActorSystem


object test extends App {

  val system = ActorSystem("hello-world")
  val myActor = system.actorOf(Props[MyActor], "myactor2")
}
class MyActor extends Actor {
  val log = Logging(context.system, this)
  val props1 = Props[MyActor]
  def receive = {
       case "test" => log.info("received test")
       case _      => log.info("received unknown message")
  }
  val child = context.actorOf(Props[MyActor], name = "myChild")
}

所以,当我运行它时,我会收到

[error] (run-main-1) java.lang.RuntimeException: While trying to load extension [akka.actor.InstanceCountingExtension]
java.lang.RuntimeException: While trying to load extension [akka.actor.InstanceCountingExtension]
        at akka.actor.ActorSystemImpl.$anonfun$loadExtensions$1(ActorSystem.scala:906)
        at scala.collection.Iterator.foreach(Iterator.scala:929)
        at scala.collection.Iterator.foreach$(Iterator.scala:929)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1406)
        at scala.collection.IterableLike.foreach(IterableLike.scala:71)
        ...
        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)
Caused by: java.lang.ClassNotFoundException: akka.actor.InstanceCountingExtension
        at java.lang.ClassLoader.findClass(ClassLoader.java:530)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[trace] Stack trace suppressed: run last compile:run for the full output.
java.lang.RuntimeException: Nonzero exit code: 1
        at scala.sys.package$.error(package.scala:27)

问题是ActorSystem,但我无法理解为什么。当我删除系统时,myActor一切正常。它甚至可以在我只使用val system = ActorSystem时生效,但系统无法创建actorOf

2 个答案:

答案 0 :(得分:1)

您可能在akka.library-extensions += "akka.actor.InstanceCountingExtension"

中设置了此设置
akka-actor-tests

这是akka-actor-tests使用的actor系统扩展,用于对当前在系统中运行的actor实例的数量进行断言。

我不认为这是一个应用程序使用的扩展,它更像是一个测试工具。

但是,根据您的需要:

  1. 如果您只想运行程序,只需删除上面的配置行,一切都应该没问题
  2. 如果由于某种原因需要扩展名,请导入{{1}}测试jar,或者确保在运行时提供this class

答案 1 :(得分:0)

问题在于测试文件夹。当我删除测试时,它开始工作。