简体   繁体   中英

Typesafe Config: How resource files get merged

I have trouble understanding the mechanism of merging resource files in Typesafe Config.

According to the Typesafe config documentation :

The convenience method ConfigFactory.load() loads the following (first-listed are higher priority):

  • system properties
  • application.conf (all resources on classpath with this name)
  • application.json (all resources on classpath with this name)
  • application.properties (all resources on classpath with this name)
  • reference.conf (all resources on classpath with this name)

Suppose I have two modules: a and b , and module a depends on module b .

lazy val a = (project in file("a"))
  ...
  .dependsOn(b % "compile->compile;test->test")

If both modules have a resource file reference.conf , how they will get merged?

Is it appending? Is so, how does it resolve conflicts?

I believe they are overriding in reverse classpath order (could not find the docs to confirm this).

classpath: a.jar;b.jar;

-> 

b reference.conf will be loaded first and then overridden by a reference.conf

This makes it consistent with how .properties files are read, the first in the classpath will be used.

I think it is a good idea to be explicit about your overrides however, either programmatically or by using reference.conf and application.conf as intended.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM