找不到键 'akka.remote.artery' 的配置设置

No configuration setting found for key 'akka.remote.artery'

我正在使用 netty 使用 ClusterActorRefProvider 创建一个简单的 akka 集群。当我 运行 来自 idea 的代码时,一切正常。但是,当我 运行 应用程序作为 jar 时,突然间一切都失败了。它抛出错误 "No configuration setting found for key 'akka.remote.artery'"。我正在使用 sbt 程序集创建 jar。

我在这里错过了什么?请帮忙....

使用 build.sbt

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

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

潜在的问题在于,当打包一个胖 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 文件时将它们添加到类路径。