【问题标题】:Akka: missing akka.versionAkka:缺少 akka.version
【发布时间】:2015-03-11 00:25:19
【问题描述】:

我有一个 scala 项目,我在 IntelliJ 中运行良好,运行/调试配置设置为应用程序,现在我想创建一个 jar 来使用“java -jar .jar”运行它。这是一个 Maven 项目,而不是 SBT。

我有三个模块,包含所有其他模块的顶层模块在资源文件夹中有一个 reference.conf。这是一个最小的 application.conf,没有很多设置。另一个模块有自己的reference.conf。

我基于我的顶级模块创建了一个工件,并构建它以创建一个 jar。当我用 java 执行它时

Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.se.pd.Main.main(Main.scala)
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka.version'
    at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:145)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:151)
    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.<init>(ActorSystem.scala:168)
    at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:504)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:141)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:118)
    at com.se.pd.ServiceMain$class.$init$(ServiceMain.scala:25)
    at com.se.pd.Main$.<init>(Main.scala:17)
    at com.se.pd.Main$.<clinit>(Main.scala)

当我解压缩文件时,我在根目录中看到了合并的 reference.conf。

我错过了什么?当我创建我的 ActorSystem 时,我需要做一些特定的事情吗?我尝试删除所有配置文件并使用所有默认值运行,但它仍然无法正常工作,尽管在这种情况下,错误从抱怨“akka.version”变为抱怨“akka”。所以感觉好像我只是没有加载 akka 默认值?

【问题讨论】:

标签: scala akka


【解决方案1】:

我出于我的目的修复了它,但它并没有真正向我阐明问题所在。 我的修复(特定于 IntelliJ IDEA)是从以下位置更改工件:

"提取到目标 JAR"

“复制到输出目录并通过清单链接”

我想当我创建一个大的胖罐子时会丢失一些东西。

--

我只是想添加一个更好的解决方案来用 maven 创建一个“胖罐子”。但是我不能相信,因为看起来 Zoltan 下面链接的 Akka 页面现在提出了相同的解决方案,老实说,我不记得我在哪里找到了这个。我可能在过去的某个时候遇到了更新的页面。请查阅该链接以获取更多信息。

所以:

使用maven shader插件创建fat jar 然后确保合并配置文件:

<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
          <resource>reference.conf</resource>
     </transformer>
     <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
      <mainClass>myMainClass</mainClass>
</transformer>

使用该配置,我可以成功构建胖罐子。

【讨论】:

  • 我建议你转到sbt,然后使用'sbt-assembly`来创建你的fat/uber jar。
  • 感谢您的建议,但我不喜欢 SBT,您必须用枪指着我的头。此外,我们在构建环境中对 maven 进行了投资,我不想通过强制使用专有构建系统来阻碍采用。
  • 文档现在特别警告捆绑到单个 jar 中时出现的问题:doc.akka.io/docs/akka/snapshot/general/…
  • sbt-assembly 不是问题。
  • 嗨,这似乎对我不起作用...我用 intellij 构建了 fat jars,我将这些转换器添加到了 pom 文件中,但我仍然收到错误 akka.version is available。 ..注意:我没有reference.conf,只有application.conf
猜你喜欢
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 2016-09-23
  • 2019-04-29
  • 1970-01-01
相关资源
最近更新 更多