我可以创建一个由许多类文件组成的uberjar,最初是Scala,Java,Clojure。我遇到的问题是,当我运行java -jar my-server.jar
时,它崩溃了:
No configuration setting found for key 'akka.version'
这是预期的,并且有一个maven solution。接受的答案here上的黄色写作基本上是Akka说的#34;你不应该用Akka罐装其中的uberjars,因为那时Akka无法找到它的{{1文件。"
我正在尝试将其作为莱因解决方案:
.conf
我有一个本地maven存储库(我的意思是不是〜/ .m2,而是一个用于将非Clojars jar引入lein构建的本地存储库)。也许我需要:pom-plugins [[org.apache.maven.plugins/maven-shade-plugin 2.2]]
再次为akka罐子拿起这个新设置 - 不 - 没有帮助。
这里有一些堆栈跟踪,以明确问题的来源:
lein deploy localrepo1
编辑我现在查看了jar文件。有两个akka jar文件,其中都有Exception in thread "main" 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:169)
at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:505)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:142)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:109)
at com.seasoft.comms.MyPLCActorHolder.createRefToLocalActor(MyPLCActorHolder.scala:39)
。这些文件未正确合并,因为(不出所料)reference.conf
无法理解其中属性键/值的嵌套。
具体而言,lein uberjar
中的reference.conf
有akka-actor_2.11-2.3.9.jar
,但此条目尚未进入合并的akka.version = "2.3.9"
。我修改了uberjar并修复了问题,当然这给了我下一个合并问题。所以这里的修复是自己手动进行合并。
更好的解决方法是编写一个小合并程序(有两个函数:谓词和合并)并将其转换为akka,以便编写构建工具的人可以使用它...
答案 0 :(得分:0)
从两个罐子中手动合并reference.conf
,然后手动更改uberjar(覆盖现有的reference.conf
)就可以了。合并文件为here。
我相信只要有来自不同罐子的属性文件具有相同名称,就会发生此问题。例如,log4j.properties
也需要被覆盖。
答案 1 :(得分:0)
我改变了火花版本以避免这种问题。 Spark 2.1.0不依赖于Akka,也没有Akka reference.conf
问题。