我有一个 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)
Run Code Online (Sandbox Code Playgroud)
当我解压缩文件时,我在根目录中看到了合并的 reference.conf。
我错过了什么?创建 ActorSystem 时是否需要做一些特定的事情?我尝试删除我的所有配置文件并使用所有默认值运行,但它仍然不起作用,尽管在这种情况下,错误从抱怨“akka.version”变为抱怨“akka”。所以感觉有点像我只是没有加载 akka 默认值?
我出于我的目的修复了它,但它并没有真正向我澄清问题是什么。我的修复(特定于 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>
Run Code Online (Sandbox Code Playgroud)
使用该配置,我可以成功构建胖罐。