2017-05-29 3 views
0

Ich erstelle einen einfachen akka Cluster mit ClusterActorRefProvider mit netty. Alles funktioniert gut, wenn ich den Code von der Idee laufen lasse. Aber plötzlich scheitert alles, wenn ich die Anwendung als jar ausführe. Es wird die Fehlermeldung "Keine Konfigurationseinstellung für den Schlüssel 'akka.remote.artery' gefunden". Ich erstelle das Glas mit sbt Assembly.Es wurde keine Konfigurationseinstellung für den Schlüssel 'akka.remote.artery' gefunden.

Was fehlt mir hier? Jede Hilfe bitte ....

+0

Bitte lassen Sie mich wissen, wenn Sie weitere Details benötigen ... – ArunavaS

+0

Scheint wie application.conf Datei in Ihrem Glas fehlt. Könnten Sie den Jar-Inhalt auflisten? Sie können 'jar tf your.jar' dafür verwenden. –

+0

Sieht so aus, als ob du akka-remote (mit Arterie) verwendest => http://doc.akka.io/docs/akka/current/scala/remoting-artery.html – mfirry

Antwort

2

gelöst mit folgenden Zeilen in build.sbt

assemblyMergeStrategy in assembly := { 
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard 
    case "reference.conf" => MergeStrategy.concat 
    case x => MergeStrategy.first 
} 
0

ich in ein ähnliches Problem lief beim Verpacken einer Akka Anwendung als weit JAR mit allen Abhängigkeiten zusammengefügt, mit dem Maven Assembly Plugin anstelle von SBT.

Das zugrunde liegende Problem liegt daran, dass beim Packen einer fetten JAR Dateien, die sich im selben Pfad befinden (z. B. /reference.conf), standardmäßig vom Buildsystem überschrieben werden. Wenn Sie also mehrere Akka-Module verwenden, überschreibt eine reference.conf alle anderen. Daher erhalten Sie in Ihrer JAR-Datei eine einzige, teilweise reference.conf statt mehrere reference.conf, die dann von der Konfigurationsbibliothek beim Laden zusammengeführt werden .

Dies führt zu den Fehlern bei der Konfiguration, die nicht gefunden wurden, da die Standardkonfigurationseinstellungen für einige Module (wie in ihrer reference.conf gefunden, die überschrieben wurde) fehlen.

@ArunavaS Antwort funktioniert für SBT, da es die reference.conf Dateien zusammenführt. Wenn Maven verwendet wird, ist es möglich, etwas Ähnliches zu konfigurieren (siehe z. B. How can I merge resource files in a Maven assembly?).

Alternativ können Sie, anstatt eine fette JAR zu verwenden, alle Abhängigkeiten in einen separaten Ordner exportieren und sie dann beim Ausführen der JAR-Datei zum Klassenpfad hinzufügen.

Verwandte Themen