找不到密钥' akka.remote.artery'的配置设置。

时间:2017-05-29 09:39:08

标签: scala akka sbt-assembly akka-cluster

我正在使用netty创建一个带有ClusterActorRefProvider的简单akka集群。当我从想法中运行代码时,一切正常。但是,当我将应用程序作为jar运行时,突然间一切都失败了。它发出错误"找不到密钥' akka.remote.artery'"的配置设置。我正在使用sbt程序集创建jar。

我在这里缺少什么?请帮助....

2 个答案:

答案 0 :(得分:4)

使用build.sbt

中的以下行解决
assemblyMergeStrategy in assembly := {
   case PathList("META-INF", xs @ _*) => MergeStrategy.discard
   case "reference.conf" => MergeStrategy.concat
   case x => MergeStrategy.first
}

答案 1 :(得分:1)

当使用Maven程序集插件而不是SBT将Akka应用程序打包为远JAR并将所有依赖项合并在一起时,我遇到了类似的问题。

根本问题在于,在打包胖JAR时,默认情况下构建系统会覆盖驻留在同一路径中的文件(例如/reference.conf)。因此,当使用多个Akka模块时,一个reference.conf将最终覆盖所有其他模块,因此您最终会在JAR文件中使用单个部分reference.conf,而不是多个reference.conf然后在加载它们时由配置库合并。

这会导致找不到配置错误,因为缺少某些模块的默认配置设置(如reference.conf中所覆盖的那样)。

@ArunavaS答案适用于SBT,因为它合并了reference.conf个文件。如果使用Maven,则可以将其配置为执行类似操作(例如,请参阅How can I merge resource files in a Maven assembly?)。

或者,您可以将所有依赖项导出到单独的文件夹,然后在运行JAR文件时将它们添加到类路径中,而不是使用胖JAR。