Я могу создать 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 и это исправило проблему, конечно, дав мне следующую проблему слияния. Таким образом, исправление здесь заключается в том, чтобы вручную выполнить слияние самостоятельно.
И лучше исправить было бы написать небольшую программу слияния (с двумя функциями: предикат и слияния) и получить его в Акку, чтобы люди, которые пишут строить инструменты могут просто использовать его ...
В вашем 'project.clj' содержится этот ключ' akka.version'? – mfirry
Я вижу, что вы говорите. Я не думаю, что это лейн 'ключ'. Сообщение в основном Akka говорит, что он не может видеть свой собственный файл конфигурации с версией в нем. По-видимому, все было бы хорошо, если бы я использовал «lein jar». Но у меня были другие проблемы с этим подходом. –
Я разработчик Scala, и могу вам сказать, что вы отправили сообщение об использовании общей библиотеки для получения свойств Scala под названием Configafe Config (github.com/typesafehub/config). У вас должен быть '.conf' файл в вашем пути к классу, содержащему этот ключ. – mfirry