Clojure lein uberjar-未找到密钥';akka.version';

Clojure lein uberjar-未找到密钥';akka.version';,clojure,akka,leiningen,Clojure,Akka,Leiningen,我可以创建一个uberjar,它由很多类文件组成,最初是Scala、Java和Clojure。我的问题是,当我运行java-jar我的服务器.jar时,它会崩溃: No configuration setting found for key 'akka.version' 这是意料之中的事,并且有着广泛的影响。公认答案上的黄色文字基本上是Akka说“你不应该用Akka jar构建Uberjar,因为那样Akka将无法找到它的.conf文件。” 我尝试将此作为lein解决方案: :pom-plug

我可以创建一个uberjar,它由很多类文件组成,最初是Scala、Java和Clojure。我的问题是,当我运行
java-jar我的服务器.jar
时,它会崩溃:

No configuration setting found for key 'akka.version'
这是意料之中的事,并且有着广泛的影响。公认答案上的黄色文字基本上是Akka说“你不应该用Akka jar构建Uberjar,因为那样Akka将无法找到它的
.conf
文件。”

我尝试将此作为lein解决方案:

:pom-plugins [[org.apache.maven.plugins/maven-shade-plugin 2.2]]
我有一个本地maven存储库(这里我指的不是~/.m2存储库,而是一个用于将非Clojars JAR引入lein构建的本地存储库)。也许我需要
lein再次为akka jars部署localrepo1
,以获得这个新设置-不-没有帮助

下面是一些堆栈跟踪,以明确问题的来源:

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)
线程“main”com.typesafe.config.ConfigException$中的异常缺失:找不到键“akka.version”的配置设置 在com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)上 在com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:145)上 在com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:151)上 在com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)上 在com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)上 位于com.typesafe.config.impl.SimpleConfig.getString(SimpleConfig.java:206) 在akka.actor.ActorSystem$设置中。(ActorSystem.scala:169) 在akka.actor.ActorSystemImpl.(ActorSystem.scala:505) 在akka.actor.ActorSystem$.apply上(ActorSystem.scala:142) 在akka.actor.ActorSystem$.apply(ActorSystem.scala:109) 在com.seasoft.comms.MyPLCActorHolder.createRefToLocalOr上(MyPLCActorHolder.scala:39) 编辑我现在已经查看了jar文件的内部。有两个akka jar文件,其中都有一个
reference.conf
。这些文件没有正确合并,因为(毫不奇怪)
leinuberjar
不理解属性键/值在其中的嵌套

具体来说,
akka-actor_2.11-2.3.9.jar
中的
reference.conf
具有
akka.version=“2.3.9”
,但该条目未进入合并的
reference.conf
。我修改了uberjar,解决了这个问题,当然,这给了我下一个合并问题。因此,这里的修复方法是自己手动进行合并


更好的解决方法是编写一个小型合并程序(具有两个功能:谓词和合并),并将其放入akka中,这样编写构建工具的人就可以使用它了……

从两个JAR中手动合并
reference.conf
,然后手动更改uberjar(覆盖现有的
reference.conf
)成功了。合并的文件是


我相信,只要有来自同名的不同jar的属性文件,就会出现这个问题。例如,还需要覆盖
log4j.properties

手动合并两个jar中的
reference.conf
,然后手动更改uberjar(覆盖现有的
reference.conf
)。合并的文件是


我相信,只要有来自同名的不同jar的属性文件,就会出现这个问题。例如,
log4j.properties
也需要被覆盖。

我更改了spark版本以避免此类问题。不依赖于Akka,并且没有Akka
reference.conf问题。

我更改了spark版本以避免此类问题。不依赖Akka,并且没有Akka
reference.conf
问题。

您的
project.clj
是否包含
Akka.version
键?我明白您的意思。我认为这不是必需的lein
键。消息基本上是Akka说它看不到自己的配置文件及其版本。显然,如果我改用
leinjar
,一切都会好起来。但是这种方法还有其他问题。我是一名Scala开发人员,我可以告诉您,您发布的错误来自使用一个名为Typesafe-Config(github.com/typesafehub/Config)的公共库来获取Scala的属性。你的类路径中应该有
.conf
文件包含该键。我是uberjars的新手。所有配置文件都放在uberjar的顶层。有一个reference.conf,它有各种Akka设置,但其中没有
version
字符串。顺便说一下,这是工作代码,我只是给它一个Clojure“皮肤”。我可能需要更仔细地查看项目结构,以进一步帮助您。绘制项目目录树是否容易?您的
project.clj
是否包含
akka.version
键?我明白您的意思。我认为这不是必需的lein
键。消息基本上是Akka说它看不到自己的配置文件及其版本。显然,如果我改用
leinjar
,一切都会好起来。但是这种方法还有其他问题。我是一名Scala开发人员,我可以告诉您,您发布的错误来自使用一个名为Typesafe-Config(github.com/typesafehub/Config)的公共库来获取Scala的属性。你的类路径中应该有
.conf
文件包含该键。我是uberjars的新手。所有配置文件都放在uberjar的顶层。有一个reference.conf,它有各种Akka设置,但其中没有
version
字符串。顺便说一下,这是工作代码,我只是给它一个Clojure“皮肤”。我可能需要更仔细地查看项目结构,以进一步帮助您。绘制项目目录树对您来说容易吗?