我可以創建一個由許多類文件組成的uberjar,最初是Scala,Java,Clojure。我的問題是,當我運行java -jar my-server.jar
它崩潰了:lein uberjar - 找不到關鍵字'akka.version'的配置設置
No configuration setting found for key 'akka.version'
這是可以預期的,具有maven solution。在接受的答案here上的黃色文字基本上是Akka說:「你不應該在他們身上製造帶有Akka罐子的Uberjars,因爲Akka將無法找到它的.conf
文件。」
我想這是一個雷音解決方案:
:pom-plugins [[org.apache.maven.plugins/maven-shade-plugin 2.2]]
我有個本地倉庫(我的意思不是〜/ .m2目錄下一個,而是使用了本地一個引進非Clojars刺入Lein構建中)。也許我需要lein deploy 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)
編輯現在我看的jar文件內。有兩個akka jar文件,其中都有reference.conf
。這些文件未正確合併,因爲(不出所料)lein uberjar
不理解其中的屬性鍵/值的嵌套。
具體而言reference.conf
在akka-actor_2.11-2.3.9.jar
有akka.version = "2.3.9"
,但此條目尚未將它合併reference.conf
。我改變了uberjar,並解決了這個問題,當然給了我下一個合併問題。所以這裏的解決方法是自己手動進行合併。
而且更好的解決將是寫一個小程序合併(有兩個功能:一個謂語和合並),並讓它進入阿卡讓誰寫的人構建工具可以直接使用它...
你的'project.clj'是否包含'akka.version'鍵? – mfirry
我明白你在說什麼。我不認爲這是一個必要的「鑰匙」。該消息基本上是Akka說它不能看到它自己的配置文件。顯然,如果我用'lein jar'代替,那麼一切都會好的。但是我有這種方法的其他問題。 –
我是一名Scala開發人員,我可以告訴你,你發佈的錯誤來自使用通用庫來獲取Scala的屬性,稱爲Typesafe Config(github.com/typesafehub/config)。 你的類路徑中應該包含'.conf'文件,該文件包含該鍵。 – mfirry