在 application.conf 中(在 Play 2.0.4,sbt 0.11.3 中)我可以使用以下替换:
app {
major = 0
minor = 1
revision = 62
date = 0127
version = ${app.major}.${app.minor}.${app.revision}.${app.date}
}
升级到 Play 2.1.0 和 sbt 0.12.2 并将此建议用于 Build.scala 后,
val conf = ConfigFactory.parseFile(new File("conf/application.conf"))
当我这样做时出现错误play clean
:
Caused by: com.typesafe.config.ConfigException$NotResolved: need to call resolve() on root config; tried to get value type on an unresolved substitution: ConfigSubstitution(${app.major}"."${app.minor}"."${app.revision}"."${app.date})
at com.typesafe.config.impl.ConfigSubstitution.valueType(ConfigSubstitution.java:54)
at com.typesafe.config.impl.DefaultTransformer.transform(DefaultTransformer.java:15)
at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:118)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:135)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:140)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:108)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:146)
at com.typesafe.config.impl.SimpleConfig.getString(SimpleConfig.java:188)
at ApplicationBuild$.<init>(Build.scala:12)
at ApplicationBuild$.<clinit>(Build.scala)
根据 Play Configuration文档,应该支持这种替换:
然而,实现必须小心,以允许对象引用自身内部的路径。例如,这必须有效:
bar : { foo : 42, baz : ${bar.foo} } 在这里,如果一个实现解决了 bar 中的所有替换作为解决替换 ${bar.foo} 的一部分,那么就会有一个循环。实现必须只解析 bar 中的 foo 字段,而不是递归整个 bar 对象。
任何想法如何解决这一问题?