25

I am using scala, spray and akka for one of my projects. In Intellij, it is working fine. When I build the project and tried to run it in command line, I get the following error.


Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting
 found for key 'akka'
        at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
        at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:147)
        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.(ActorSystem.scala:168)
        at akka.actor.ActorSystemImpl.(ActorSystem.scala:504)
        at akka.actor.ActorSystem$.apply(ActorSystem.scala:141)
        at akka.actor.ActorSystem$.apply(ActorSystem.scala:108)
        at akka.actor.ActorSystem$.apply(ActorSystem.scala:99)

Please help me in solving the issue

mohit
  • 4,746
  • 1
  • 19
  • 37
Rahul Dev
  • 327
  • 1
  • 4
  • 11
  • 2
    You need to provide configuration for akka in your conf file... as simple as that. – sarveshseri Feb 06 '15 at 11:48
  • That I understood... I am using default config. In ide its working fine.. – Rahul Dev Feb 07 '15 at 07:32
  • Then it may be related to the way you are running it on the command line. How do you run it? – jrudolph Feb 09 '15 at 14:05
  • Its because of when we build the projects as a single jar the reference.conf files will be overridden. We have to copy all jars reference.conf to a single reference.conf. it will work fine...:-) – Rahul Dev Feb 09 '15 at 14:18

3 Answers3

60

The problem is when using sbt:assembly the default merge strategy excludes all the reference.conf files as per

If multiple files share the same relative path (e.g. a resource named application.conf in multiple dependency JARs), the default strategy is to verify that all candidates have the same contents and error out otherwise.

The solution is to add a MergeStrategy as follows

assemblyMergeStrategy in assembly := {
  case PathList("reference.conf") => MergeStrategy.concat
}
Jeffrey Chung
  • 18,571
  • 7
  • 29
  • 49
BenjaminParker
  • 636
  • 6
  • 3
4

Akka will read the configuration file from the following location by default:

  1. application.conf under root of classpath (including in jar)
  2. manually passed in configuration from ActorSystem("name", config).
  3. reference.conf under root of classpath (including in jar)

Please double check your classpath and see if you have a bad classpath reference which indicate a bad root of classpath for akka jars, spray jars, etc.

LynxZh
  • 760
  • 4
  • 9
1

maven-shade-plugin configuration for maven users:

<configuration>
    <transformers>
        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
            <resource>reference.conf</resource>
        </transformer>
    </transformers>
</configuration>

skwon
  • 766
  • 5
  • 12