找不到密钥 akka 的配置设置
Posted
技术标签:
【中文标题】找不到密钥 akka 的配置设置【英文标题】:no configuration setting found for key akka 【发布时间】:2015-04-06 13:11:48 【问题描述】:我在我的一个项目中使用 scala、spray 和 akka。在 Intellij 中,它运行良好。当我构建项目并尝试在命令行中运行它时,出现以下错误。
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting
found for key 'akka'
at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:147)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)
at com.typesafe.config.impl.SimpleConfig.getString(SimpleConfig.java:206)
at akka.actor.ActorSystem$Settings.(ActorSystem.scala:168)
at akka.actor.ActorSystemImpl.(ActorSystem.scala:504)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:141)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:108)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:99)
请帮我解决问题
【问题讨论】:
你需要在你的conf文件中为akka提供配置……就这么简单。 我理解...我使用的是默认配置。在 ide 它工作正常.. 那么可能和你在命令行运行的方式有关。你是如何运行它的? 这是因为当我们将项目构建为单个 jar 时,reference.conf 文件将被覆盖。我们必须将所有 jars reference.conf 复制到单个 reference.conf。它会正常工作...:-) 【参考方案1】:问题是在使用 sbt:assembly 时,默认的合并策略会排除所有的 reference.conf 文件
如果多个文件共享相同的相对路径(例如,多个依赖 JAR 中名为 application.conf 的资源),默认策略是验证所有候选文件是否具有相同的内容,否则会出错。
解决方法是添加一个MergeStrategy如下
assemblyMergeStrategy in assembly :=
case PathList("reference.conf") => MergeStrategy.concat
【讨论】:
在执行jetty:start
然后exit
之后,我在 sbt 控制台中收到错误。【参考方案2】:
Akka 默认会从以下位置读取配置文件:
-
classpath 根目录下的application.conf(包括在jar 中)
从 ActorSystem("name", config) 手动传入配置。
classpath 根目录下的reference.conf(包括在jar 中)
请仔细检查您的类路径,看看您是否有一个错误的类路径引用,这表明 akka 罐子、喷雾罐等的类路径根不正确。
【讨论】:
【参考方案3】:maven 用户的 maven-shade-plugin 配置:
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>reference.conf</resource>
</transformer>
</transformers>
</configuration>
【讨论】:
以上是关于找不到密钥 akka 的配置设置的主要内容,如果未能解决你的问题,请参考以下文章
akka-http 错误:找不到参数 um 的隐式值:akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller