我正在使用netty创建一个带有ClusterActorRefProvider的简单akka集群。当我从想法中运行代码时,一切正常。但是,当我将应用程序作为jar运行时,突然间一切都失败了。它发出错误"找不到密钥' akka.remote.artery'"的配置设置。我正在使用sbt程序集创建jar。
我在这里缺少什么?请帮助....
答案 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。