Je peux résoudre les substitutions lorsque j'analyse config à partir de la chaîne, mais pas lors de l'analyse de la carte ou du fichier.Typesafe config - analyser à partir de la carte/fichier et résoudre
import java.io.File
import com.typesafe.config.{Config, ConfigFactory}
import scala.collection.JavaConversions.mapAsJavaMap
val s: String = "a = test, b = another ${a}"
val m: Map[String, String] = Map("a" -> "test", "b" -> "another ${a}")
val f: File = new File("test.properties") // contains "a = test\nb = another ${a}"
val cs: Config = ConfigFactory.parseString(s).resolve
val cm: Config = ConfigFactory.parseMap(mapAsJavaMap(m)).resolve
val cf: Config = ConfigFactory.parseFile(f).resolve
println("b from string = " + cs.getString("b"))
println("b from map = " + cm.getString("b"))
println("b from file = " + cf.getString("b"))
> b from string = another test
> b from map = another ${a}
> b from file = another ${a}
Quand je ne résous pas immédiatement il est visible que les espaces réservés variables ne sont pas vraiment traités de la même façon:
val cs: Config = ConfigFactory.parseString(s)
val cm: Config = ConfigFactory.parseMap(mapAsJavaMap(m))
val cf: Config = ConfigFactory.parseFile(f)
> cs: com.typesafe.config.Config = Config(SimpleConfigObject({"a":"test","b":"another "${a}}))
> cm: com.typesafe.config.Config = Config(SimpleConfigObject({"a":"test","b":"another ${a}"}))
> cf: com.typesafe.config.Config = Config(SimpleConfigObject({"a":"test","b":"another ${a}"}))
Je pourrais peut-être simplement convertir carte/fichier à chaîne, mais est-il un moyen de faire que la bibliothèque le gère?
Il y a un problème sur la bibliothèque [page Github] (https://github.com/typesafehub/config/issues/76) que plus ou moins la même demande, avec des explications similaires à la réponse de Federico ci-dessous. –