2016-03-04 4 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 - это в основном Акка, говорящий: «Вы не должны строить uberjars с банками Akka в них, так как тогда Akka не сможет найти свои файлы .conf».

Я пытаюсь это как решение LEIN:

:pom-plugins [[org.apache.maven.plugins/maven-shade-plugin 2.2]] 

У меня есть локальный репозиторий Maven (под этим я имею в виду не в ~/.m2 один, но местный один, который используется для введения не- Clojars в сборку лейн). Может мне понадобится lein deploy localrepo1 для банок akka снова, чтобы забрать эту новую настройку - Nope - это не помогло.

Вот некоторые из трассировки стека, чтобы понять, где проблема возникает из:

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) 

Редактировать Я смотрел теперь внутри баночки файлов. Есть два файла akka jar, в которых есть reference.conf. Эти файлы неправильно объединены, потому что (неудивительно) lein uberjar не понимает вложенности ключа/значений свойства внутри них.

В частности reference.conf в akka-actor_2.11-2.3.9.jar имеет akka.version = "2.3.9", но эта запись не дошла до объединенного reference.conf. Я изменил uberjar и это исправило проблему, конечно, дав мне следующую проблему слияния. Таким образом, исправление здесь заключается в том, чтобы вручную выполнить слияние самостоятельно.

И лучше исправить было бы написать небольшую программу слияния (с двумя функциями: предикат и слияния) и получить его в Акку, чтобы люди, которые пишут строить инструменты могут просто использовать его ...

+0

В вашем 'project.clj' содержится этот ключ' akka.version'? – mfirry

+0

Я вижу, что вы говорите. Я не думаю, что это лейн 'ключ'. Сообщение в основном Akka говорит, что он не может видеть свой собственный файл конфигурации с версией в нем. По-видимому, все было бы хорошо, если бы я использовал «lein jar». Но у меня были другие проблемы с этим подходом. –

+0

Я разработчик Scala, и могу вам сказать, что вы отправили сообщение об использовании общей библиотеки для получения свойств Scala под названием Configafe Config (github.com/typesafehub/config). У вас должен быть '.conf' файл в вашем пути к классу, содержащему этот ключ. – mfirry

ответ

0

вручную слияние reference.conf с двух банок, а затем вручную изменение uberjar (переписывание существующего reference.conf) сделали трюк. Объединенный файл: here.

Я считаю, что эта проблема возникнет в любое время, когда есть файлы свойств, которые поступают из разных банок с одинаковым именем. Например, log4j.properties также необходимо было перезаписать.

0

Я изменил версию искры, чтобы избежать такой проблемы. Spark 2.1.0 не зависит от Akka и не имеет проблемы с Akka reference.conf.

 Смежные вопросы

  • Нет связанных вопросов^_^