【发布时间】:2013-01-28 12:41:42
【问题描述】:
在 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 并使用此 suggestion 进行 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)
根据播放配置documentation应该支持这种替换:
然而,实现必须小心,以允许对象引用 自己内部的路径。例如,这必须有效:
bar : { foo : 42, 巴兹:${bar.foo} 在这里,如果一个实现解决了 bar 中的所有替换作为解决替换 ${bar.foo} 的一部分,则会有一个 循环。实现必须只解析 bar 中的 foo 字段, 而不是递归整个 bar 对象。
任何想法如何解决这个问题?
【问题讨论】:
标签: sbt playframework-2.1 typesafe-stack