Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于Akka的可运行Jar_Java_Eclipse_Akka - Fatal编程技术网

Java 基于Akka的可运行Jar

Java 基于Akka的可运行Jar,java,eclipse,akka,Java,Eclipse,Akka,我试图从命令行运行一个可运行的jar,该命令行中嵌入了几个akka进程。 虽然我不是应用程序的原始作者,但我知道代码在eclipse中运行得非常愉快。 然而,当我尝试导出并作为一个可运行的Jar运行时,它会在一段时间后崩溃,这就是它开始启动akka进程的时候。 我正在使用Java8运行它 java -jar something.jar {options} 错误: at akka.actor.ActorInitializationException$.apply(Actor.scala:1

我试图从命令行运行一个可运行的jar,该命令行中嵌入了几个akka进程。 虽然我不是应用程序的原始作者,但我知道代码在eclipse中运行得非常愉快。 然而,当我尝试导出并作为一个可运行的Jar运行时,它会在一段时间后崩溃,这就是它开始启动akka进程的时候。 我正在使用Java8运行它

java -jar something.jar {options}
错误:

   at akka.actor.ActorInitializationException$.apply(Actor.scala:174)
    at akka.actor.ActorCell.create(ActorCell.scala:607)
    at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:461)
    at akka.actor.ActorCell.systemInvoke(ActorCell.scala:483)
    at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:282)
    at akka.dispatch.Mailbox.run(Mailbox.scala:223)
    at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
    Caused by: akka.ConfigurationException: ActorSystem [akka://ClusterSystem] needs to have a 'ClusterActorRefProvider' enabled in the configuration, currently uses [akka.actor.LocalActorRefProvider]
    at akka.cluster.Cluster.<init>(Cluster.scala:71)
    at akka.cluster.Cluster$.createExtension(Cluster.scala:34)
    at akka.cluster.Cluster$.createExtension(Cluster.scala:29)
    at akka.actor.ActorSystemImpl.registerExtension(ActorSystem.scala:737)
    at akka.actor.ExtensionId$class.apply(Extension.scala:79)
    at akka.cluster.Cluster$.apply(Cluster.scala:29)
    at akka.actor.ExtensionId$class.get(Extension.scala:91)
    at akka.cluster.Cluster$.get(Cluster.scala:30)
    at akka.cluster.Cluster.get(Cluster.scala)
    at com.dynniq.its.csm.core.akka.Actor.preStart(Actor.java:93)
    at akka.actor.Actor$class.aroundPreStart(Actor.scala:489)
    at akka.actor.UntypedActor.aroundPreStart(UntypedActor.scala:95)
    at akka.actor.ActorCell.create(ActorCell.scala:590)

    @Override
    public void preStart() {
    **cluster = Cluster.get(getContext().system());**
    cluster.subscribe(getSelf(), MemberUp.class);
    preStartExtra();
    }
位于akka.actor.ActorInitializationException$.apply(actor.scala:174)
在akka.actor.ActorCell.create(ActorCell.scala:607)
在akka.actor.ActorCell.invokeAll$1(ActorCell.scala:461)
在akka.actor.ActorCell.systemInvoke(ActorCell.scala:483)
在akka.dispatch.Mailbox.processAllSystemMessages上(Mailbox.scala:282)
在akka.dispatch.Mailbox.run(Mailbox.scala:223)
在akka.dispatch.Mailbox.exec(Mailbox.scala:234)
位于scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
位于scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
位于scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
在scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)中
原因:akka.ConfigurationException:ActorSystem[akka://ClusterSystem]需要在配置中启用“ClusterActorRefProvider”,当前使用[akka.actor.LocalActorRefProvider]
在akka.cluster.cluster.(cluster.scala:71)
位于akka.cluster.cluster$.createExtension(cluster.scala:34)
位于akka.cluster.cluster$.createExtension(cluster.scala:29)
在akka.actor.ActorSystemImpl.registerExtension(ActorSystem.scala:737)
位于akka.actor.ExtensionId$class.apply(Extension.scala:79)
在akka.cluster.cluster$.apply(cluster.scala:29)
位于akka.actor.ExtensionId$class.get(Extension.scala:91)
在akka.cluster.cluster$.get(cluster.scala:30)
在akka.cluster.cluster.get(cluster.scala)上
位于com.dynniq.its.csm.core.akka.Actor.preStart(Actor.java:93)
在akka.actor.actor$class.aroundPreStart(actor.scala:489)
在akka.actor.UntypedActor.aroundPreStart(UntypedActor.scala:95)
在akka.actor.ActorCell.create(ActorCell.scala:590)
@凌驾
公共无效预启动(){
**cluster=cluster.get(getContext().system())**
subscribe(getSelf(),MemberUp.class);
动脉前壁();
}
但正如我所说,它似乎在eclipse环境中工作。 我做错了什么


提前感谢。

< P>答案是在错误信息的中间:

Caused by: akka.ConfigurationException: ActorSystem [akka://ClusterSystem] needs to have a 'ClusterActorRefProvider' enabled in the configuration, currently uses [akka.actor.LocalActorRefProvider]
一个简单的集群配置如下所示,请注意akka.actor.provider设置:

较新版本的Akka的配置稍有不同,请参阅中的详细信息


因此,您的应用程序可能由于某种原因无法从资源中读取application.conf,或者配置文件没有作为参数正确地传递给java-jar

事实上,问题是从eclipse运行时,
akka.actor.provider
设置在哪里,为什么从jar运行时没有正确地进行设置。我可以想象的另一件事是,当您在
reference.conf
而不是
application.conf
中设置此值时:因为
reference.conf
是从类路径读取的,它们的顺序可能没有定义,因此,您不应该在
reference.conf
中有重叠的设置,而应该将主应用程序配置放在
application.conf
中。
akka {
  actor {
    provider = "akka.cluster.ClusterActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    log-remote-lifecycle-events = off
    netty {
      hostname = "127.0.0.1"
      port = 0
    }
  }

  cluster {
    seed-nodes = [
      "akka://ClusterSystem@127.0.0.1:2551", 
      "akka://ClusterSystem@127.0.0.1:2552"]

    auto-down = on
  }
}
  actor {
    provider = "cluster"
  }