2016-03-04 65 views
0

我可以創建一個由許多類文件組成的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.confakka-actor_2.11-2.3.9.jarakka.version = "2.3.9",但此條目尚未將它合併reference.conf。我改變了uberjar,並解決了這個問題,當然給了我下一個合併問題。所以這裏的解決方法是自己手動進行合併。

而且更好的解決將是寫一個小程序合併(有兩個功能:一個謂語和合並),並讓它進入阿卡讓誰寫的人構建工具可以直接使用它...

+0

你的'project.clj'是否包含'akka.version'鍵? – mfirry

+0

我明白你在說什麼。我不認爲這是一個必要的「鑰匙」。該消息基本上是Akka說它不能看到它自己的配置文件。顯然,如果我用'lein jar'代替,那麼一切都會好的。但是我有這種方法的其他問題。 –

+0

我是一名Scala開發人員,我可以告訴你,你發佈的錯誤來自使用通用庫來獲取Scala的屬性,稱爲Typesafe Config(github.com/typesafehub/config)。 你的類路徑中應該包含'.conf'文件,該文件包含該鍵。 – mfirry

回答

0

手動合併reference.conf從兩個罐子,然後手動改變uberjar(覆蓋現有reference.conf)做了伎倆。合併的文件是here

我相信這個問題會在任何時候出現屬性文件來自具有相同名稱的不同罐子。例如log4j.properties也需要被覆蓋。

0

我改變了spark版本以避免這類問題。 Spark 2.1.0不依賴於Akka,並且沒有Akka reference.conf問題。